继承 : extends
语法 子类的名字 extends 父类的名字
父亲
```
public class Uncle {
private String name ;
private int age ;
public void Hongbao() {
System.out.println("舅舅要发红包");
}
}
```
子类二:
```
package edu.xcdq;
public class UncleOne extends Uncle {
public void chouyan(){
System.out.println("大舅抽烟");
}
public void Hongbao(){
System.out.println("大舅家道中落,发不起红包,该送祝福了");
}
}
```
子类二 :
1 子类能够继承到父类所有的不是私有的属性 和 方法
2 子类能够复写父类的方法 如果没有复写,调用的是父类的方法 , 子类一旦复写,优先调用复写后的子类方法
优点:
1 实现代码的复用
2 有利于子类代码的扩展
多成继承
```
public class Uncle {
private String name ;
private int age ;
public void Hongbao() {
System.out.println("舅舅要发红包");
}
}
public class UncleOne extends Uncle {
public void chouyan(){
System.out.println("大舅抽烟");
}
public void Hongbao(){
System.out.println("大舅家道中落,发不起红包,该送祝福了");
}
}
package edu.xcdq;
public class UncleOneSon extends UncleOne {
public void Hongbao(){
System.out.println("大舅的儿子厉害了 ,接着发红包");
}
}
```
类继承的加载顺序
先加载父类,再加载子类
祖先类的构造方法最先执行,祖先类最先被创造出来,其次是父类,最后是子类
在构造方法中会隐性的调用super()超类 父类地无参构造方法
final 最终的 最后的
被final修饰的成员不可以被改写
1final 修饰的变量值不能发生修改 pl = 3.1415
修饰基本数据类型, 其值不能发生改变,修改引用数据类型,例如数组 ,数组名不能指向新的空间
2 final 修饰的方法不能被重写
3 final 修饰的类 不能被继承
多态
一个父类有多个子类
把子类的对象赋值给父类的过程叫做向上转型
把父类的对象赋值给子类的过程叫做向下转型
语法:
正常语法:
类名 对象名 = new 类名();
向上转型
子类类型 对象名 = new 子类的对象
向下转型 :
子类类型 对象名 = (子类类型 ) 父类的对象
//向上转型
UncleOne uncleOne1 = new UncleOne();
uncleOne1.faHongbao();
UncleTwo uncleTwo2 = new UncleTwo();
uncleTwo2.faHongbao();
//向下转型
Uncle uncle = new Uncle();
UncleOne temp = (UncleOne) uncle;
instanceof 判断引用类型是否一致
判断对象是否是一个类的实例(具体的对象)
package com.company;
public class Demo02 {
public static void main(String[] args) {
UncleOne dajiu = new UncleOne();
ganHuo(dajiu);
UncleTwo erjiu = new UncleTwo();
ganHuo(erjiu);
}
public static void ganHuo( Uncle uncle ) {
if ( uncle instanceof UncleOne ) {
System.out.println("出门外干活");
}else if (uncle instanceof UncleTwo) {
System.out.println("在室内干活");
}else {
System.out.println("传进来的不是舅舅,老太太没办法指使");
}
}
}