这篇专栏的笔记是面向对象三大特性之一:继承

继承父类子类之间的关系。其中,父类又叫基类,子类又叫派生类

特点:Java中的继承是单继承,即每个类只能有一个父类。
作用:1.子类拥有父类非私有的成员变量和方法。
      2.实现代码复用

1、单继承

1.注意extends中的"s"。
2.创建子类对象时,会执行父类的构造方法,执行子类的构造方法。

//Animal.java
public class Animal {
	public Animal(){
		System.out.println("Animal(父类)构造方法");
	}
	String id = "动物";
}

//注意extends中的"s"
class Cat extends Animal{
	public Cat(){
		System.out.println("Cat(子类)构造方法");
	}
	String id = "猫";
}


//Init.java
public class Init {
	public static void main(String[] args) {
		Cat c = new Cat();
		System.out.println("Age:" + c.id);
	}
}

/*
运行结果:
Animal(父类)构造方法
Cat(子类)构造方法
id:猫
*/



2、多重继承

1.Cat类继承了Animal类之后,Ragdoll类继承了Cat类。
2.创建Ragdoll类对象时,会按照继承顺序执行构造方法。

//Animal.java
public class Animal {
	public Animal(){
		System.out.println("Animal(父类)构造方法");
	}
	String id = "动物";
}

class Cat extends Animal{
	public Cat(){
		System.out.println("Cat(子类)构造方法");
	}
	String id = "猫";
}

class Ragdoll extends Cat{
	public Ragdoll(){
		System.out.println("Ragdoll(子类的子类构造方法)");
	}
	String id = "布偶猫";
}


//Init.java
public class Init {
	public static void main(String[] args) {
		Ragdoll c = new Ragdoll();
		System.out.println("id:" + c.id);
	}
}

/*
运行结果:
Animal(父类)构造方法
Cat(子类)构造方法
Ragdoll(子类的子类构造方法)
id:布偶猫
*/



3、多个类继承同一个类

1.Cat类和Dog类继承同一个Animal类。

//多个类继承同一个类
public class Animal {
	String id = "动物";
}

class Cat extends Animal{
	String id = "猫";
}

class Dog extends Animal{
	String id = "狗";
}



4、不支持多继承(注意!)

1.Cat类同时继承Animal类和Being类。(报错)

//Cat类同时继承Animal类和Being类。(报错)
class Animal {
	String id = "动物";
}

class Being{
	String id = "生物";
}

class Cat extends Animal, Being{
	String id = "猫";
}



5、继承特性

1.父类中定义了私有和非私有的成员变量,子类没有定义变量。
2.子类只继承了父类非私有的成员变量。

//Animal.java
//Animal.java
public class Animal {
	String id = "动物";
	private int age = 3;
}

class Cat extends Animal{
}


//Init.java
public class Init {
	public static void main(String[] args) {
		Cat c = new Cat();
		System.out.println("id:" + c.id);
		//子类不继承父类私有变量
		System.out.println("age:" + c.age);
    	}
}



6、final关键字

1.方法变量都可以被final修饰。
2.被final修饰后,类不能被继承,方法不能被重写,变量不能被再次赋值。
(代码块在图5下方)

类:

java 派生多个类 java派生类和子类_java


图1 被final修饰的类不能被继承

方法:

java 派生多个类 java派生类和子类_编程语言_02


图2 被final修饰的方法不能被重写

变量:

java 派生多个类 java派生类和子类_intellij idea_03


图3 被final修饰的变量不能被再次赋值

java 派生多个类 java派生类和子类_编程语言_04


图4 被final修饰的变量没有初始化,可以在构造方法中赋值


java 派生多个类 java派生类和子类_java_05


图5 若被final修饰的变量既没有初始化,也没有在构造方法中赋值,则报错

//类不能被继承
final class Animal {
	String id = "动物";
}

class Cat extends Animal{}



//方法不能被重写
class Animal {
	void a(){};
	final void b(){};
}

class Cat extends Animal{
	void a(){};
	void b(){};
}



//变量不能被再次赋值
class Animal {
	int a = 3;
	final int b = 5;
	public Animal(){
		a = 4;
		b = 6;
	}
}



//若被final修饰的变量没有初始化,仍可以在构造方法中赋值
class Animal {
	final int b;
	public Animal(){
		b = 6;
	}
}



//若被final修饰的变量既没有初始化,也没有在构造方法中赋值,则报错
class Animal {
	final int b;
	public Animal(){}
}




氷鸢鸢鸢
2020.2.4