Java继承和多态

 一、继承

1、什么是继承,继承的作用是什么?

在父类中只定义一些通用的属性和方法,子类可以继承父类的特征和行为,使得子类具有父类的各种属性和方法(例如儿子继承父亲财产)。子类可以重写父类的方法,也可以自己重新定义特有的行为和属性。

继承的作用:提高了代码的复用性,避免重复代码的出现。

继承的基本语法:

class 子类 extends 父类{

} //父类的构造方法不可以被继承

特点:

①在继承关系中,父类和子类需要满足 is a 的关系。

②父类具有子类通用的特征和行为,而子类除了具有父类的特征和行为,还允许具有一些自己特殊的特征和行为。

③单继承性:Java 允许一个类仅能继承一个其它类,即一个类只能有一个父类,这个限制被称做单继承性(一个儿子只能有一个亲爸爸,一个爸爸可以有多个儿子)。后面学到的接口(interface)则允许多继承(接口与接口之间)。

2、继承的应用场景是什么时候?

当两个类具有相同的特征(属性)和行为(方法)时,就可以使用继承的想法,抽取出两个类中相同的特征和方法,将其放入一个具有共性的父类中,然后将这两个类去继承这个父类。

3、 什么是方法重写?

在子类中定义的一个方法,其方法名、返回类型及参数列表与父类中某个方法的方法名、返回类型及参数列表相同,那么子类的这个方法就是父类的方法重写。

方法重写在不同类,是实现多态的必要条件。

4、super关键字的用法

在子类的构造方法中,通过super关键字调用父类的构造方法。

如果子类中重写了父类的方法,能够通过 super.方法名 调用父类的方法。

父类:

public class Fu {
    private String name;
    private int age;

    public Fu(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void method(){
        System.out.println("我是父类方法");
        System.out.println(this.name + "..." + this.age);
    }
}

子类:

public class Zi extends Fu{

    public Zi(String name, int age) {
        super(name, age);
    }
    public void play(){
        System.out.println("我是子类方法");
        super.method();
    }
}

测试类:

public class Test01 {
    public static void main(String[] args) {
        Zi a = new Zi("王大锤",18);
        System.out.println("==============");
        a.play();
        System.out.println("==============");
        a.method();
    }
}

输出结果:

 二、多态

 1、什么是多态?多态的体现是什么?

定义(体现):一个引用就可以表现多种形态。(同一个行为,具有不同的形式)

 2、多态有什么好处?

可以增强程序的可扩展性及可维护性,使代码更加简洁。

不但能减少编码的工作量,也能大大提高程序的可维护性及可扩展性。

 3、如何实现多态?多态的实现的前提有什么?

多态实现的前提:⑴ 有继承或者实现。

⑵ 要有方法重写。⑶ 父类引用指向子类对象(接口引用指向实现类对象)

 4、多态的访问特点

成员变量:编译时看左边,运行时看左边 

成员方法:编译时看左边,运行时看右边 

这也导致了多态不能访问子类的特有方法,编译不通过。

如何实现:

public class Demo1 {

    public static void main(String[] args) {
        Cat cat = new Cat();
        show(cat);

        Dog dog = new Dog();
        show(dog);

        Monkey m = new Monkey();
        show(m);
    }

    //多态的应用:方法的形参是父类,实参是子类对象
    public static void show(Animal a){
        a.eat();
    }
}
class Animal{
    public void eat(){
        System.out.println("动物觅食");
    }
}

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

    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }
}

class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }


    public void lookHome() {
        System.out.println("狗看家");
    }
}

class Monkey extends Animal{
    @Override
    public void eat() {
        System.out.println("猴子吃香蕉");
    }
}

运行结果:

 5、多态的优缺点

优点:⑴ 实现组件化和代码解耦。

⑵ 当方法形参为父类或接口时,调用方法时就可以传入任何子类对象或者实现类对象。

缺点:多态的情况下,无法使用子类独有的功能。(规范和统一功能的调用)

 6、多态的类型转换

向上转换:自动转换,子类转成父类。(小转大,可看成基本数据类型的转换)

向下转换:强制转换,父类转成子类。

//多态下无法使用子类独有的方法,需要强转才能调用
        //强转前需要做类型判断
        if(a instanceof Cat){
            Cat c = (Cat) a;
            c.catchMouse();
            c.eat();
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值