Java面向对象(继承与多态)

10 篇文章 0 订阅

Java面向对象–继承与多态

一:什么是继承

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

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

二:为什么需要继承

如下例子:

​ • 开发教员类,其中教员分为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 + ".");
    }
}
public class JavaTeacher {
    String name; // 教员姓名
    String school; // 所在中心
    public JavaTeacher(String myName, String mySchool) {
        name = myName;
        school = mySchool;
    }
    public void giveLession(){
        System.out.println("启动 Eclipse");
        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、运行时,根据实际创建的对象类型动态决定使用哪个方法

七:final

通常情况下,为了扩充类的功能,我们允许类的继承
• 但在某些情况下,例如,Sun公司提供的某些功能类,如进行数学运算的类、对字符串处理的类等,
由于已经比较完美,不需要再修订;当然,也可能出于安全方面的理由,我们不希望进行子类化,或
者考虑到执行效率问题,希望确保涉及这个类各对象的所有行动都要尽可能地有效。这个时候就有必
要禁止客户继承。那么如何实现禁止继承的功能呢?这就要靠final关键字来完成了。

其特点:

​ • final关键字是提高修饰符,可以修饰类,方法和变量。

​ • 对于类:被final修饰的类是一个最终类,不可以被继承

​ • 对于方法:被final修饰的方法是一个最终方法,不可以被覆盖

​ • 对于变量:被final修饰的变量是一个常量,只能被赋值一次

对于此理解应该稍显浅薄,还需继续思考和探索。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值