java学习笔记(第五天:继承和多态)

目录

一、继承

1、继承的好处:提升了代码的复用性和维护性。

2、继承的弊端:削弱了子类的独立性。

3、继承中变量和方法的访问特点

4、继承中构造方法的访问特点

5、方法重写

6、继承的注意事项

二、多态

1、多态的好处:提高了程序的扩展性

2、多态的弊端:不能使用子类的特有功能

3、多态中成员访问特点

(1)成员变量

(2)成员方法

4、多态的转型

(1)向上转型

(2)向下转型


一、继承

  • 继承的关键字是extends

1、继承的好处:提升了代码的复用性维护性

2、继承的弊端:削弱了子类的独立性

因此,什么时候使用继承要慎重考虑,多做一些项目,自然就会有更深的理解。一般来说,一个类是另一个类的一种时使用继承,比如,猫和狗都是动物中的一种,因此,猫和狗可以继承动物类。

3、继承中变量和方法的访问特点

  • 访问子类的变量和方法时,先在子类局部范围找,再在子类成员范围找,再在父类成员范围内找,都没有就会报错。
  • 使用this.成员变量,可以跳过局部范围,直接在子类成员变量范围内找,使用super.成员变量,可以跳过子类成员变量,直接在父类成员范围内找。

上代码:

(1)定义一个动物类

package InheritAndPolymor;

public class Animal {
    private int age = 80;
    private String name = "动物";

    public Animal() {
    }

    public Animal(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void eat(){
        System.out.println("动物吃东西");
    }

    public void sleep(){
        System.out.println("动物要睡觉");
    }
}

(2)定义一个猫类,继承自动物类

package InheritAndPolymor;

public class Cat extends Animal{
    private int age = 40;
    private String name = "猫";

    public Cat() {
    }

    public Cat(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    public void show(){
        //变量
        int age=20;
        //访问局部变量
        System.out.println(age); //输出结果为20
        //访问成员变量
        System.out.println(this.age);  //输出结果为40
        //访问父类成员变量
        System.out.println(super.getAge()); //输出结果为80
    }
}

(3)定义一个测试类,演示继承中,变量和方法的访问特点

package InheritAndPolymor;

public class Demo {
    public static void main(String[] args) {
        Cat c = new Cat();
        c.show();

        //成员方法
        c.eat();//访问子类成员方法,输出结果为:猫吃鱼
        c.sleep();//子类没有该方法,在父类中寻找,输出结果为:动物要睡觉
    }
}

上面的例子中,看懂输出结果是什么,就弄懂继承中变量和方法的访问特点了。

4、继承中构造方法的访问特点

子类中所有的构造方法默认都会访问父类的无参构造方法,因为子类构造方法的第一句默认都是super();

如果父类中没有无参构造方法,必须在子类构造方法的第一句访问父类带参构造方法:super(参数)

5、方法重写

  • 私有方法不能被重写(因为父类中的私有成员变量和私有成员方法子类是不能继承的)
  • 子类方法访问权限不能更低(public>默认>私有)

6、继承的注意事项

  • 只能继承一个父类,即不支持多继承
  • 可以继承爷爷类,即支持多层继承

二、多态

多态使用时: Animal a = new Cat();

多态的体现:

  • 有继承/实现关系
  • 有方法重写
  • 有父类引用(Animal a) 指向子类对象(new Cat())

1、多态的好处:提高了程序的扩展性

定义方法的时候,使用父类作为参数,将来在使用的时候,使用具体的子类参与操作。

2、多态的弊端:不能使用子类的特有功能

3、多态中成员访问特点

(1)成员变量

  • 编译看左边(也就是说,左边的类中有该变量,编译时才能不报错)
  • 执行看左边(也就是说,访问多态类的成员变量时,其值是左边的类的值)

上代码

定义一个动物类:

package InheritAndPolymor2.InheritAndPolymor;

public class Animal {
    public int age = 80;

}

定义一个猫类:

package InheritAndPolymor2.InheritAndPolymor;

public class Cat extends Animal {
    public int age = 40;
    public int wight = 60;
}

定义一个测试类:

package InheritAndPolymor2.InheritAndPolymor;

public class Demo {
    public static void main(String[] args) {
        Animal c = new Cat();

        System.out.println(c.age); //编译看左,Animal类中有age成员变量,所以不报错,
                                   //执行看左,Animal类中age的值为80,这里输出结果为80
        
        System.out.println(c.wight); //编译看左,Animal 类中没有wight属性,所以编译报错

    }
}

(2)成员方法

编译看左,执行看右,这是因为成员方法有重写,而成员变量没有。

4、多态的转型

多态的转型是为了克服多态的弊端,让父类对象也能使用子类的特有功能。

(1)向上转型

父类引用指向子类对象, Animal a = new Cat();

(2)向下转型

父类引用转换为子类对象,Cat c =(Cat)a;  相当于一个变量类型转换。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白马少年郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值