Java面向对象三大特征:封装、继承、多态
封装:封装是一种做法,控制类内可访问属性或方法的访问权限
的做法
在设置变量的值时要通过指定的方法来设置,在方法内部可以加一些判断
可以通过:分包和访问权限修饰符来做控制,以及一些常见的封装做法
包:我们可以理解成文件夹,分包就是分文件夹来管理不同的类
同一包下不能有同名类,不同包的类之间要使用import导包
访问修饰符:访问的权限大-->小public protected 不写 private
private 在当前类中可访问(需要get和set方法)
default 在当前包内和访问
protected 在当前类和它派生的类中可访问
public 公众的访问权限,谁都能访问
封装的一般做法:
将本类的所有成员变量私有化提供公共访问权限的设置setXXX方法和获取getXXX方法、 例如: ` public class aaa04 {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public static void main(String[] args) {
aaa04 b1=new aaa04();
b1.setAge(20);
b1.setName("小王");
b1.setSex("男");
System.out.println("我叫"+b1.getName()+",今年"+b1.getAge()+"岁,性别为"+b1.getSex());
}
}
继承:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承的特点:当发生继承时,子类就重用了父类的方法和字段,并且子类还可以添加新的方法和字段来满足需求。
继承的优点:
extends:java中类的继承是单一的,一个子类只能有一个父类,extends只能继承一个类,
但是object除外 Java中object是一切类的间接类
并且java中的类可以多层继承,不能环形继承!!
super:super代表的是父类对象的引用
可以用super来区分子类父类中成员的重名
可以在子类的构造方法中,通过super关键字调用父类的构造方法 例如:
` public class aaa05 {
String name;
int age;
String sex;
public aaa05() {
}
public aaa05(String name, int age) {
this.name = name;
this.age = age;
}
} public class aaa06 extends aaa05 {
public aaa06() {
}
public aaa06(String name,int age) {
super(name,age);
}
}
注意这种用法要在子类构造方法中的首行
构造方法不能被继承
小记this和super:
this用在本类的成员方法中,指代当前对象
this用在本类的构造方法中,this()指代其他构造必须用在首行
super用在子类的成员方法中,指代父类的引用
super用在子类的构造方法中,super()指代父类的构造必须用在首行
super和this都要在首行不能一起存在
多态:对象的多态性,父类的引用指向子类的对象(或子类的对象赋给父类的引用)
多态存在的三个必要条件:继承、重写、父类引用指向子类对象
多态转型:
向上转型:当子类对象赋值给一个父类引用时,就是向上转型
格式:父类类型 变量名=new 子类类型();
向下转型:通过强制类型转换格式,将父类引用转为子类格式
格式:子类类型 变量名=(子类类型)父类类型的变量
例如:
public class test0708 {
public static void main(String[] args) {
aaa07 a07=new aaa08();
a07.eat();
aaa08 a08=(aaa08)a07;
a08.eat();
}
}
public class aaa07 {
public void eat() {
System.out.println("在吃东西");
}
}
public class aaa08 extends aaa07{
public void eat(){
System.out.println("小刘在吃东西");
}
}
`
`