一、继承的基本概念
继承是面向对象的三大特性之一
继承是Java中实现代码重用的重要手段之一。Java中只支持单根继承,即一个类只能有一个直接父类。
语法
访问修饰符 class 子类名称 extends 父类名称{
}
二、继承的使用
父类 Animal.java
public class Animal {
String name;
int health;
//无参构造方法
public Animal() {
super();
}
//有参构造方法
public Animal(String name, int health) {
super();//调用父类Object类里的无参构造方法
this.name = name;
this.health = health;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
//输出动物的信息
public void print(){
System.out.println("动物昵称:" + this.name + ",健康值:" + this.health);
}
}
第一个子类 Dog.java
public class Dog extends Animal {
private String strain;
public Dog() {
super();//调用父类Animal类里的无参构造方法
}
public Dog(String name, int health, int love, String strain) {
super(name, health, love);//调用父类Animal类里的有参构造方法
this.strain = strain;
}
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain = strain;
}
}
第二个子类 Cat.java
public class Cat extends Animal {
private String color;
public Cat() {
super();//调用父类Animal类里的无参构造方法
}
public Cat(String name, int health, String color) {
super(name, health, love);//调用父类Animal类里的有参构造方法
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
主类 Test.java
public class Test {
public static void main(String[] args) {
//测试Dog类
Dog dog1 = new Dog();
dog1.setName("beibei");
dog1.setHealth(90);
dog1.setStrain("泰迪");
dog1.print();
Cat cat1 = new Cat("滑溜", 70, "灰色");
cat1.print();
}
}
三、使用继承实现类
1、子类访问父类构造方法
super();
super(name);
2、访问父类属性
super.name;
3、访问父类方法
super.print();
注意事项:
- 使用super关键字,super代表父类对象
- super只能出现在子类的方法和构造方法中
- 在子类构造方法中调用必须是第一句
- 不可以访问父类中定义为private的属性和方法
1、继承条件下构造方法的调用规则
子类构造方法没有通过super显式调用父类的有参构造方法,也没通过this显式调用自身其他构造方法
----系统默认调用父类的无参构造方法
子类构造方法通过super显式调用父类的有参构造方法
----执行父类相应构造方法,而不执行父类无参构造方法
子类构造方法通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则
2、子类继承父类的什么?
- 继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里
- 继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里
3、子类可以继承父类的所有资源吗?
不能被继承的父类成员如下:
- private成员
- 子类与父类不在同包,使用默认访问权限的成员
- 构造方法