面向对象--封装、继承、多态

xiaoxiao2025-10-21  9

1. 面向对象的概念

面向对象:封装 -类内部行为自己控制,别人无法干涉 本身方法等 自身决定

面向对象:继承 子类复用父类的描述信息和行为 父类/基类:哺乳动物类 子类/派生类:人类

面向对象:多态 哺乳动物类:人类、马类 人类和马类 鸣叫行为不一样,称为多态

2.定义类

方法、变量小写开头。 类大写开头 成员变量是:private; 成员方法是:public ; 不要加static public class Person { //成员变量 一般是private private int age; private String name; // 成员方法 一般是public //设置年龄 public void setAge(int value) { this.age=value; } //设置名字 public void setName(String value) { this.name=value; } //读取名字+年龄 public void sayHello() { System.out.println("我的名字是"+this.name+",我的年龄是"+this.age); } }

3.对象的创建和调用方法

定义类的变量,指向初始化的对象,调用方法

public class Main { public static void main(String[] args) { // 定义变量p 指向一个初始化对象 Person p=new Person(); //调用成员变量和成员方法 p.setAge(30); p.setName("小伟"); p.sayHello(); } }

4.对象之间是相互独立的

相同类的对象之间 或者不同类的对象之间都是相互独立的

public static void main(String[] args) { // 定义变量p 指向一个初始化对象 Person p=new Person(); //调用成员变量和成员方法 p.setAge(30); p.setName("小伟"); p.sayHello(); //定义新对象。p和p1 这两个变量指向的对象互不影响 Person p1=new Person(); p1.setAge(33); p1.setName("林志颖"); p1.sayHello(); //重新调用p指向的对象的方法 p.sayHello();

5.通俗方法讲变量和对象

1个变量只能指向一个对象 如果变量指向对象变了,那么之前所指向对象的关系删除

public class Main { public static void main(String[] args) { // 定义变量p 指向一个初始化对象 Person p=new Person(); //调用成员变量和成员方法 p.setAge(30); p.setName("小伟"); p.sayHello(); //定义新对象。p和p1 这两个变量指向的对象互不影响 Person p1=new Person(); p1.setAge(33); p1.setName("林志颖"); p1.sayHello(); // p2 指向 p1变量所指向的对象 Person p2=p1; p2.setAge(66); p2.setName("周润发"); p2.sayHello(); p1.sayHello(); } }

6 给方法传变量

传递给方法的参数变量本身是拷贝。 public class Main {

public static void main(String[] args) { // 定义变量p 指向一个初始化对象 Person xiaowei=new Person(); //调用成员变量和成员方法 xiaowei.setAge(30); xiaowei.setName("小伟"); xiaowei.sayHello(); //调用方法,改变变量的值 test(xiaowei); xiaowei.sayHello(); } // 定义一个方法,注意是要加static static void test(Person p) { p=new Person(); p.setAge(888); }

}

7成员变量和局部变量

必须初始化,对象初始化为null NullPointerException --空指针

8 深入理解this

Person 类 package com.test; public class Person { private int age; private String name; private int height; private String gender; public void setAge(int age) { this.age=age; } public int getAge() { return this.age; } public void setName(String name) { this.name=name; } public String getName() { return this.name; } public void setHeight(int height) { this.height=height; } public int getHeight() { return this.height; } public void setGender(String gender) { this.gender=gender; } public String getGender() { return this.gender; } public void sayHello() { System.out.println("my name is "+this.name+",我的年龄是"+this.age+",我的身高是"+this.height+",我的性别是"+this.gender); } public boolean isSamePeople(Person p) { return this.age==p.age&&this.name.equals(p.name) && this.height==p.height &&this.gender.equals(p.gender); } } main函数 package com.test; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Person p1=new Person(); p1.setAge(18); p1.setGender("girl"); p1.setHeight(175); p1.setName("xiaowei"); p1.sayHello(); Person p2=new Person(); p2.setAge(18); p2.setGender("girl"); p2.setHeight(175); p2.setName("xiaowei"); p2.sayHello(); Person p3=new Person(); p3.setAge(38); p3.setGender("boy"); p3.setHeight(159); p3.setName("zhangsan"); p3.sayHello(); System.out.println(p1.isSamePeople(p2)); System.out.println(p2.isSamePeople(p3)); } }

9 private 和public

类中 成员变量一般用private 成员方法是public 成员变量的值设定或者取得一般用 set 和get public方法

10构造函数

构造函数 可以不定义,系统默认有一个无参构造函数。方法名和类名一致,没有返回值构造函数可在类中定义,public Person()构造函数可以重载,多个构造函数,参数类型或者个数不一致如果有有参构造函数,则类默认的无参构造函数不能用,除非新建无参构造函数构造函数一般用来赋初始值 构造函数:可以用来进行初始化值; get set 可以用来改变值。 不矛盾,可以配合使用 //定义类 public class Person { private int age; private String name; // 定义构造函数,与类名相同,无参数 public Person() { System.out.println("定义构造函数"); } // 定义构造函数1,与类名相同,有1个参数 public Person(int age) { System.out.println("定义构造函数1"); this.age=age; } // 定义构造函数2,与类名相同,有1个参数 public Person(int age,String name) { System.out.println("定义构造函数2"); this.age=age; this.name=name; } public void setAge(int age) { this.age=age; } public int getAge() { return this.age; } public void setName(String name) { this.name=name; } public String getName() { return this.name; } public void sayHello() { System.out.println("my name is "+this.name+",我的年龄是"+this.age); } } //定义main函数 public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Person p1=new Person(); p1.sayHello(); Person p2=new Person(15); p2.sayHello(); Person p3=new Person(15,"zhangsan"); p3.sayHello(); } }

11 JavaBean 规范

如果成员变量希望外界赋值,提供set方法如果成员变量希望外界读取,提供get方法类必须是公共类,最多只能有1个public类必须有一个无参的构造函数成员变量privateboolean 类型成员变量 get方法 可以是is

12 对象和对象之间的关系

示例 Dog 类有性别和姓名 Person类 有年龄,身高以及Dog类的对象 Dog public class Dog { private String name; private String sex; // 无参构造函数 public Dog() { } //set 和get 成员变量 public void setName(String name) { this.name=name; } public String getName() { return this.name; } // 利用Source自动生成 成员变量set 和get public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public void sayhello() { System.out.println("i am one dog; my name is "+this.name+",my sex is "+this.sex); } }

Person

package com.test; public class Person { // 定义一个无参构造函数 public Person() { } // 定义3个普通成员变量 和 1个Dog 类的变量 private int age; private int height; private String name; private Dog pet; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public String getName() { return name; } public void setName(String name) { this.name = name; } //set和get类的变量 public void setPet(Dog pet) { this.pet=pet; } public Dog getPet() { return this.pet; } public void sayhello() { if(this.pet==null) System.out.println("i am sorry"); else System.out.println("my name is "+this.name+",我的身高是"+this.height+",我的年龄是"+this.age+ "我的宠物名字是"+this.pet.getName()+",我的宠物性别是"+this.pet.getSex()); } }

Main类

package com.test; public class Main { public static void main(String[] args) { // 初始化人,最好是先初始化狗,为了避免空指针 Person p1=new Person(); p1.setAge(33); p1.setHeight(180); p1.sayhello(); //初始化狗 并且赋值 Dog d1=new Dog(); d1.setName("旺财"); d1.setSex("girl"); p1.setPet(d1); d1.sayhello(); p1.sayhello(); } }

13 包

作用: 不同类放在不同包下面,比较好区分 重名类放在不同的包下面 包名小写 包名:公司名反着写:com.rupeng.crm.usr 类之间互相引用:import com.rupeng.com.*(不推荐) import com.rupeng.com.Person(推荐) import static 方法,直接调用: import static java.lang.Math.abs; public class Main { public static void main(String[] args) { //abs 直接调用,不用写Math int i=abs(-3); System.out.println(i); } }
转载请注明原文地址: https://www.6miu.com/read-5038282.html

最新回复(0)