java类的继承详解

面向对象

面向对象的三大特征:继承、封装、多态。

继承

继承是多态的前提,没有继承就没有多态。

集成主要解决的问题是:共性抽取

  • 父类/基类/超类
  • 子类/派生类

子类就是一个父类,子类是可以被继承的。

使用extends继承指定的父类。

1. 成员变量的访问

  1. 基本使用
// 父类 Mode
public class father{
    String name;
    public void getName(){
        System.out.println(this.name);
    }
}
// 子类 Mode1
public class child extends father{
    // 子类继承了父类的成员变量和成员方法
}
// main
public static void main(String[] args){
    Mode1 mode = new Mode();
    mode.name = "张三";
    mode.getName();
}
// 输出
张三
  1. 如果父子类中的成员变量重名,访问规则是:
  • 直接访问

直接通过子类对象访问成员变量,等号左面的对象指向谁就是用的谁的成员变量,没有则向上找,子类优先,都没有则报错。

// 父类
public class Fu{
	int num = 20;
}
// 子类 
public class Zi extends Fu{
	int num = 20;
}
// main
public static void main(String[] args) {
    Zi mode = new Zi();
    System.out.println(mode.num);
}
  • 间接访问

间接通过成员方法访问成员变量

  1. 父类、子类的成员变量和子类的方法定义的局部变量都重名

关键字:super

// 子类
public class Zii extends Fuu{
	int num = 20;
	public Zii() {
		int num = 30;
		System.out.println(num);
		System.out.println(this.num);
		System.out.println(super.num); // 使用super访问父类的成员变量
	}
}
// main
public static void getFZ() {
	Zii zi = new Zii();
}

2. 成员方法的访问

  1. 基本使用
// 父类
public class Fu {
	public void getFu() {
		System.out.println("父类执行");
	}
}
// 子类
public class Zi extends Fu{
	public void getZi() {
		System.out.println("子类执行");
	}
}
// main
Zi zi = new Zi();
	zi.getFu();
	zi.getZi();
  1. 子类和父类的成员方法重名

父类和子类方法重名,对象是谁方法就是谁的

  1. 重写(@Override

  2. 重写:在继承关系中,方法名重名,参数列表也一样,就需要重写。

重载:方法名相同,参数列表不同。

@Override:注解

  1. 子类方法的返回值必须小于等于父类方法的返回值范围。
// 父类
public class Fu(){
    public Object getFu(){
        return null;
    }
}
// 子类
public class Zi(){
    public String getZi(){
        return null;
    }
}
  1. 子类方法的权限必须大于等于父类的权限修饰符

public > protected > (default) > private

// 父类
public class Fu(){
    private Object getFu(){
        return null;
    }
}
// 子类
public class Zi(){
    public String getZi(){
        return null;
    }
}
  1. 重写方法时使用父类方法

关键字:super

// 父类
public void methodA() {
	System.out.println("你好");
};
// 子类
public void methodA() {
	super.methodA(); // 使用父类的方法
};
// main
public static void main(String[] args){
    Zi zi = new Zi();
    zi.methodA();
}
  1. 继承中构造方法的访问特点
  • 实例化子类构造方法先执行父类的构造方法。
  • 子类构造方法中默认有一个super()方法。
  • 只有子类构造方法才能调用父类的构造方法。
  • 父类重载的构造方法需要用super指定。
  • super指定父类构造方法必须写在子类构造方法的最上面。
// 父类
public class Fu(){
    public Fu(int num){
        
    }
}
// 子类
public class Zi(){
    public Zi(){
        super.Fu(10); // 
        System.out.println("zhangsan");
    }    
}

3. super使用方法

  1. 使用父类的成员变量。
  2. 使用父类的成员方法。
  3. 访问父类的构造方法。

4. this使用方法

  1. 局部变量访问本类的成员变量。

  2. 本类的成员方的相互调用。

  3. 本类的构造方法相互访问,此用法只能有唯一一个。

  4. thissuper的构造方法不能同时使用。

5. 内存图

java类的继承详解_第1张图片

6. 继承的特点

  • java是单继承,一个只能继承一个类。
  • java可以多级继承。
  • 一个父类可以有多个子类。

你可能感兴趣的:(学习Java)