一、为什么要继承
public class Dog {
public String name;
public int age;
public void eat(){
System.out.println(name +" 在吃狗粮");
}
}
public class Cat {
public String name;
public int age;
public void eat(){
System.out.println(name +" 在吃鱼");
}
}
当我么写多个类例如上面的猫类、狗类时,我们发现这两个类中有很多相同的部分,因此我们可以设计出一个类Animal,这个类含有Dog、Cat类的共同类型的成员变量、成员方法,从而进行共性抽取,实现代码复用。象Animale类的类被称作父类、基类,而Dog、Cat这些类被称为子类、派生类。
二、继承的实现
public class Animal {
public String name;
public int age;
public void eat(){
System.out.println(name +" 在吃东西···");
}
}
首先我们定义父类Animal,然后我们定义子类Dog并通过extends关键字进行继承。
public class Dog extends Animal {
String color;
public void eat(){
System.out.println(name +" 在吃狗粮");
}
}
Dog 中可以有自己特有的成员变量和方法,也可以重写子类的方法。(当子类和父类拥有相变量名和类型的变量时,会优先使用子类的变量)
public class Test {
public static void main(String[] args) {
Dog dog =new Dog();
dog.age = 2;
dog.name = "旺财";
dog.eat();
}
}
此时创建dog类时,就可以调用子类继承父类的变量了。
Java不支持多继承,即一个类最多有一个父类。
三、super关键字
super的用法与this相似
1. super.变量名 可以调用父类的成员变量;
2. super.方法名 可以调用父类的成员方法;
3. super() 可以调用父类的构造方法。
四、继承中的构造方法
父类有构造方法时,子类必须建立构造方法来调用父类的构造方法对父类的成员变量进行初始化。
public class Animal {
public String name;
public int age;
public void eat(){
System.out.println(name +" 在吃东西···");
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
}
此时我们在Dog类中必须 调用Animal方法,不然会报错。
public class Dog extends Animal {
String color;
public void eat(){
System.out.println(name +" 在吃狗粮");
}
public Dog(String name, int age, String color){
super(name, age);
this.color = color;
}
}
五、final关键字
1. final修饰的变量会被认为是常量,不能再被修改;
2. final修饰的方法,不能被重写;
3. final修饰的类时密封类,不能被继承。
六、代码块执行顺序
1.父类静态 2.子类静态 3.父类实例 4.子类实例 5.父类构造 6.子类构造