什么是继承
继承就是子类继承父类的特征与行为。特征即成员属性,行为即成员方法
为什么需要继承?
提高代码复用性,减少代码冗余,提高开发效率。
比如Dog类里有姓名和年龄,Cat类也有姓名和年龄,这时就可以将这些共有的属性,抽取到一个新的类中,这个类就叫做父类。
示例代码一:不用继承的情况
Cat类
public class Cat {
private String name;
public void sleep(){
System.out.println(name+"睡觉");
}
public void eat(){
System.out.println(name+"吃饭");
}
public void miao(){
System.out.println(name+"喵喵叫");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Dog类
public class Dog {
private String name;
public void sleep(){
System.out.println(name+"睡觉");
}
public void eat(){
System.out.println(name+"吃饭");
}
public void wolf(){
System.out.println(name+"汪汪叫");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试类
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("狗");
dog.sleep();
dog.eat();
dog.wolf();
System.out.println("-------------------------------------------");
Cat cat = new Cat();
cat.setName("猫");
cat.sleep();
cat.eat();
cat.miao();
}
}
运行结果
狗睡觉
狗吃饭
狗汪汪叫
-------------------------------------------
猫睡觉
猫吃饭
猫喵喵叫
示例代码二:使用继承的情况
Animal类
public class Animal {
private String name;
public void sleep(){
System.out.println(name+"睡觉");
}
public void eat(){
System.out.println(name+"吃饭");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Cat类
public class Cat extends Animal{
public void miao(){
System.out.println(this.getName()+"喵喵叫");
}
}
Dog类
public class Dog extends Animal {
public void wolf(){
System.out.println(this.getName()+"汪汪叫");
}
}
测试类
public class Test {
public static void main(String[] args) {
//子类继承父类,此时父类对象只能调用父类里面的属性和方法
Animal animal1= new Animal();
animal1.setName("狗");
animal1.sleep();
animal1.eat();
Animal animal2 = new Animal();
animal2.setName("猫");
animal2.sleep();
animal2.eat();
System.out.println("----------------------------");
//子类继承父类,子类对象既可以调用父类里的属性和方法,也可以调用自身的属性和方法
Dog dog = new Dog();
dog.setName("狗");
dog.sleep();
dog.eat();
dog.wolf();
Cat cat = new Cat();
cat.setName("猫");
cat.sleep();
cat.eat();
cat.miao();
System.out.println("----------------------------");
//子类继承父类,也可以用多态中的向下转型,访问子类的属性和方法
Animal animal = new Dog();
//animal.wolf(); 编译报错,说明向上转型的父类引用变量无法访问子类中的属性和方法
Dog dog1 = (Dog) animal;
dog1.setName("狗");
dog1.sleep();
dog1.eat();
dog1.wolf();
Animal animal3 = new Cat();
Cat cat1 = (Cat) animal3;
cat1.setName("猫");
cat1.sleep();
cat1.eat();
cat1.miao();
}
}
运行结果
狗睡觉
狗吃饭
猫睡觉
猫吃饭
----------------------------
狗睡觉
狗吃饭
狗汪汪叫
猫睡觉
猫吃饭
猫喵喵叫
----------------------------
狗睡觉
狗吃饭
狗汪汪叫
猫睡觉
猫吃饭
猫喵喵叫
继承的特点
- 用
extends
修饰 - 一个类只能继承一个父类
- 子类在继承父类的同时,也可以有自己的属性和方法
- 子类继承父类,父类的对象只能调用父类中的属性和方法,无法调用子类的方法
- 子类继承父类,子类的对象既可以调用父类中的对象和属性,也可以调用自身的对象和属性
- 子类继承父类,是多态的前提