继承与多态

一:什么是继承
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

父亲 == 被继承 ==》 儿子

二:为什么需要继承
如下例子:

​ • 开发教员类,其中教员分为Java教员以及.NET教员,各自的要求如下:
​ • Java教员
​ 属性:姓名、所属中心
​ 方法:授课(步骤:打开Eclipse、实施理论课授课)、自我介绍
​ • .NET教员
​ 属性:姓名、所属中心
​ 方法:授课(步骤:打开Visual studio 2005、实施理论课授课)、自我介绍

public class DotNetTeacher {
    String name; // 教员姓名
    String school; // 所在中心
    public DotNetTeacher(String myName,String mySchool) {
        name = myName;
        school = mySchool;
    }
    public void giveLession(){
        System.out.println("启动 Visual Studio2005");
        System.out.println("知识点讲解");
        System.out.println("总结提问");
    }
    public void introduction() {
        System.out.println("大家好!我是" + school + "的" + name + ".");
    }
}

从上可以看出“代码存在重复,违背了 ‘write once ,only once’ 的原则”

》》所以可以把相同的部分放到一个类里面(基类)----也就是父类,然后让子类继承父类

三、如何使用继承
​ • 在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:

public class JavaTeacher2 extends Teacher {
    //其余代码省略
}

​ •在父类中只定义一些通用的属性与方法,例如:

public class Teacher {
    private String name; // 教员姓名
    private String school; // 所在中心
    public Teacher(String myName, String mySchool) {
        //初始化属性值
    }
    public void giveLesson() { //授课方法的具体实现 }
    public void introduction() { //自我介绍方法的具体实现 }
}

​ • 子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法

public class Teacher {
    private String name; // 教员姓名
    private String school;// 所在中心
    public Teacher (String myName, String mySchool) {
        //初始化属性值
    }
    public void giveLesson() {
        //授课方法的具体实现
    }
    public void introduction() {
        //自我介绍方法的具体实现
    }
}

public class JavaTeacher2 extends Teacher {
    public JavaTeacher2(String myName, String mySchool) {
        super(myName, mySchool);
    }
    public void giveLesson(){
        System.out.println("启动Eclipse");
        super.giveLesson();
    }
}

如上:父类中的属性和方法可以被子类继承,由于giveLesson()方法与父类的实现有所不同,因此,

重写了该方法。

方法重写:子类和父类的方法具有相同的名称、参数列表、返回类型。

但是值得我们注意的是Teacher类的构造方法是否也被继承了,答案是构造方法是不能被继承的。

在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类。

四:方法覆盖
​ 在子类继承父类的基础上,子类重新定义与父类相同名称的方法,我们把这种在子类中重新定义父类的方法叫做方法的覆盖。

例如,在Student类(父类)定义study()方法,如果JavaStudent类(子类)继承了Student类,按照继承的特点,JavaStudent类已经拥有study()方法,但JavaStudent类的study()方法想拥有不同于Student类中study()方法不同的功能特性,那么JavaStudent类study()方法需要重新定义,我们把这样的重新定义叫做方法的覆盖(或者叫方法的重写)

五:super关键字
this关键字用于表示类的对象自身,而super关键字可以表示父类的引用,也就是说我们使用super关键字在子类中调用父类的方法,在上面的内容我们知道了子类的构造方法是不能被继承的,但可以使用super关键字调用父类构造方法从而简化子类的构造方法的编辑。

六:多态
​ 多态指的是同一个行为具有多个不同表现形式和形态的能力。

例如,在Student类有study()方法,JavaStudent类和WebStudent类同样有study()方法,但他们执行的功能是不一样,这就叫做多态。在Java中实现多态的三个必要条件:

继承:在多态中必须存在有继承的关系的子类与父类;

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法;

向上转型:在多态中需要将子类的引用付给父类对象,只有这样该引用才能够具备调用父类的方法和子类的方法的能力。

​ ??为什么要使用多态??

使用多态之后,当需要增加新的子类类型时,无需更改总部类,程序的可扩展性及可维护性增强。简单来说,多态是具有表现多种形态的能力的特征,同一个实现接口,使用不同的实例而执行不同操作。

??如何实现多态??

1、子类重写父类的方法
2、编写方法时,使用父类定义的方法
3、运行时,根据实际创建的对象类型动态决定使用哪个方法
————————————————
版权声明:本文为CSDN博主「XiaoChong1998」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43473154/article/details/101061207

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值