java中的继承

什么是继承

继承就是子类继承父类的特征与行为。特征即成员属性,行为即成员方法

为什么需要继承?

提高代码复用性,减少代码冗余,提高开发效率。

比如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();
    }
}


运行结果

狗睡觉
狗吃饭
猫睡觉
猫吃饭
----------------------------
狗睡觉
狗吃饭
狗汪汪叫
猫睡觉
猫吃饭
猫喵喵叫
----------------------------
狗睡觉
狗吃饭
狗汪汪叫
猫睡觉
猫吃饭
猫喵喵叫

继承的特点

  1. extends 修饰
  2. 一个类只能继承一个父类
  3. 子类在继承父类的同时,也可以有自己的属性和方法
  4. 子类继承父类,父类的对象只能调用父类中的属性和方法,无法调用子类的方法
  5. 子类继承父类,子类的对象既可以调用父类中的对象和属性,也可以调用自身的对象和属性
  6. 子类继承父类,是多态的前提
posted @ 2019-04-29 21:43  爱听音乐的猪  阅读(200)  评论(0编辑  收藏  举报