####继承(extends)
1、Java中使用extends关键字表示一个类继承了另一个类,抽象出一个父类,子类去继承父类的属性和方法,还可以扩展自己特有的属性和方法。
2、子类可以继承父类允许继承的属性和行为,但是父类不能使用子类扩展出来的属性和行为。
3,Public修饰的,protected修饰的,如果是同一个包下,默认修饰符也能继承。
4、实例化一个子类对象,同时也会实例化一个父类对象,但是这个父类对象不能对外直接访问,而是通过子类对象访问。就好比是,子类对象中包含了一个父类对象,当调用子类不存在的内容时,恰好父类有也允许直接访问,那么就能通过子类体现了继承的好处。
5、这个父类对象严格按照父类结构构造出来,既然构造了父类那么就需要调用父类的构造方法。所以:调用子类构造方法时,父类的构造方法需要先调用一下(默认的),并且是先调用。
6、子类对象中访问父类对象的属性和方法,需要使用super关键字相对this关键字来说的。
super 关键字的功能:
(1)super 是子类 对象中访问父类对象的属性和方法的桥梁
(2)super 关键字可以用来调用父类的方法
继承关系是可传递的
子类除了可以调用父类的方法,也可以调用父类的父类的方法,也就是说继承可以确保某个父类型之下的所有类都会有父类型所持有的全部方法。
最终类
Java还有一个关键字final,用它修饰的类不能被继承,称为最终类。不想被其他类继承的工具类一般都会做成最终类,我们以前学过的Math类就是最终类。
单一继承性
Java不支持多重继承,因为多重继承会有称为“致命方块”的问题。
/*
* 1、继承有传递性,如果一个子类访问某个成员不存在那么会找父类
* 父类没有,继续上找,如果有那么不找了,如果没有继续找,直到找到Object类
* 如果Object类仍然没有,那么调用失败。
* 2,方法的重写具有截断性
*
*/
示例:
public class Rich {
protected String name;// 姓名
protected int age; // 年龄
protected Sexs sex; // 性别
// 构造方法,初始化类的属性
public Rich(int age, String name, Sexs sex) {
this.age = age;
this.name = name;
this.sex = sex;
}
// 刷卡方法
public void shuaKa() {
System.out.println("喜刷刷,喜刷刷。。。");
}
}
public class Rich1st2 extends Rich {
// 构造方法,初始化类的属性
public Rich1st2(int age, String name, Sexs sex) {
super(age, name, sex);//调用父类构造方法
}
// 刷卡方法
public void shuaKa() {
System.out.println(this.name + "掏出自己的卡");
super.shuaKa();//调用父类刷卡方法
####方法重写(override)
1、方法的重写发生在父类和子类之间,只能子类重写父类的方法。
2、要求不能低于父类的访问能修饰符
3、方法签名跟父类完成一致
4、返回值一定要一样(或者兼容)
重写后的方法有一个特嗲点:
调用后,如果子类重写了父类的方法,那么就不用杂调用父类的方法,直接调用子类的方法
示例:
public class Rich {
protected String name;// 姓名
protected int age; // 年龄
protected Sexs sex; // 性别
// 构造方法,初始化类的属性
public Rich(int age, String name, Sexs sex) {
…………
}
// 刷卡方法
public void shuaKa() {
System.out.println("喜刷刷,喜刷刷。。。");
}
}
public class Rich1st2 extends Rich {
// 构造方法,初始化类的属性
public Rich1st2(int age, String name, Sexs sex) {
super(age, name, sex);//调用父类构造方法
}
// 刷卡方法
public void shuaKa() {
System.out.println(this.name + "掏出自己的卡");
super.shuaKa();//调用父类刷卡方法
}
}