java继承和多态

本文详细介绍了Java中的继承、多层次继承、多态的概念及其优势。通过具体代码示例展示了如何实现多态,包括重写、虚函数的Java体现以及子类构造器的使用。同时,分享了继承设计的一些技巧,强调了正确使用继承和多态的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、继承
Java用关键字extends表示继承。

关键字 extends 表明正在构造的新类派生于一个已存在的类。已存在的类称为超类(superclass),新类称为子类(subclass)。超类和子类是 Java 程序员最常用的两个术语。在设计类的时候,应该将通用的方法放在超类中, 而将具有特殊用途的方法放在子类中。

二、多层次继承
Animals  -->  Dog  -->  Tady

package com.nezha.javase;
 
public class Tady extends Dog{
    public Tady(String name, String info) {
        super(name, info);
    }
}
三、多态
多态是同一个行为具有多个不同表现形式或形态的能力。

1、多态的优点
1. 消除类型之间的耦合关系
2. 可替换性
3. 可扩充性
4. 接口性
5. 灵活性
6. 简化性
2、多态存在的三个必要条件
继承
重写
父类引用指向子类对象
Animals dog = new Dog("大黄","汪汪");
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

四、重写
当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。

要想调用父类中被重写的方法,则必须使用关键字 super。

Animals类

package com.nezha.javase;
 
public class Animals {
    public void call(){
        System.out.println("动物叫...");
    }
}
Cat子类

package com.nezha.javase;
 
public class Cat extends Animals{
    @Override
    public void call() {
        System.out.println("喵喵喵...");
    }
}
Dog子类

package com.nezha.javase;
 
public class Dog extends Animals{
    @Override
    public void call() {
        super.call();
    }
 
    public static void main(String[] args) {
        Animals dog = new Dog();
        dog.call();//动物叫...
        Animals cat = new Cat();
        cat.call();//喵喵喵...
    }
}

子类可以通过super调用父类的方法。 

五、虚函数
虚函数的存在是为了多态。

Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。

六、子类构造器
package com.nezha.javase;
 
public class Animals {
    private String name;
    private String info;
 
    public void call(){
        System.out.println("动物叫...");
    }
 
    public void speak(String name,String info){
        System.out.println(name +" --> " + info);
    }
}
子类构造器可以通过super调用父类的构造器,前提条件一定是父类要有这个构造器。

package com.nezha.javase;
 
public class Animals {
    private String name;
    private String info;
 
    public void call(){
        System.out.println("动物叫...");
    }
 
    public void speak(String name,String info){
        super.speak(name, info);
    }
}
七、继承的设计技巧
1、将公共操作和域放在超类
2、不要使用受保护的域
有些人认为protected是一个很好的选择,然后并不是。

子类集合是无限制的,任何一个人都能由其他基类派生出一个子类,并编写代码以直接访protected的实例域,从而破坏了封装线。

在Java程序设计语言中,在同一包中的所有类都可以访问protected域,而不管它是否为这个类的子类。不过,protected方法对于指示哪些不提供一般用途从而应在子类中重新定义的方法很有用。

3、使用继承实现“is-a”关系
4、除非所有继承的方法都有意义,否则不要使用继承
5、在覆盖方法时,不要改变预期的行为
6、使用多态,而非类型信息
7、不要过多地使用反射

尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值