【java面向对象】在代码中看3大特性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qsbbl/article/details/82778619

我们知道,面向对象的3大特性:封装、继承、多态很重要,那今天我们就来谈谈它们。

封装

说起封装,我们就能想到private,被private修饰的成员,在本类中能够被访问,但外类就不能访问了。这也就是对成员,即成员变量和成员方法进行了封装。
封装的好处是保障了成员的安全性。
那如果外类想访问怎么办呢?可以使用get/set方法或构造方法。
具体可看小编的这篇博客——【java面向对象】类的定义与调用示例(https://blog.csdn.net/qsbbl/article/details/82767995
其中,从原始的定义和调用到封装后的定义和调用,就是从无封装到有封装的过程。里面说的很详细,小编在这就不再赘述了。

继承

运用extends这个关键字,就能让一个类向另一个类叫爸爸。
……开个玩笑。
关于继承,我们从3个方面来说:成员变量、成员方法、构造函数

  • 1、继承在成员变量中的体现——就近原则

在这里插入图片描述
在这个demo中,其实Father类中也有一句赋值age的代码:

public int age=45;

但是,不管是父类中的45,还是成员变量中的20,都比不过局部变量中的10,因为它离输出最近。
进一步说,那如果想输出45或20怎么办?
答:可以用super或this关键字,具体可看此博客:https://blog.csdn.net/qsbbl/article/details/82774971

  • 2、继承在成员方法中的体现——就近原则

子类可以重写父类的方法,可用@Override注解。
子类如果在重写后,还想使用父类的同名方法,可以使用super关键字。

super.say();

备注:
(1)父类私有的方法不能被重写,即被private修饰的方法
(2)重写时,子类的访问权限不能更低,即当父类中的方法修饰符为默认的时,子类修饰符不能为private。(修饰符权限由高到低为:pubic、默认、private)
(3)如果父类是个抽象类,除非子类也是个抽象类,否则必须重写父类中的抽象方法;如果是非抽象方法,可重写可不重写。

  • 3、继承在构造方法中的体现

子类的所有构造方法,包括无参和有参,在执行前都会先执行父类的无参构造方法。

多态

多态指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。比如在下面这个例子中,eat()这个方法,在Animal类中,执行的结果是“吃东西”;在Cat类中,执行的结果是“猫吃鱼”;在Dog类中,执行的结果是“狗吃骨头”。

  • 1、多态在成员变量中的体现

父类Animal中,定义age为40。
在这里插入图片描述
子类Cat中,定义age为20。
在这里插入图片描述
测试类Test。多态在成员变量中的调用规则为编译看左边,执行看左边,即编译的时候看Animal的成员,有age这个成员,通过;执行的时候也看Animal的成员,age=40,所以最后执行结果为40。
在这里插入图片描述

  • 2、多态在成员方法中的体现

在父类Animal中,定义了eat()方法
在这里插入图片描述
在子类Cat中,重写了eat()方法,又新定义了一个自己的方法playGame()
在这里插入图片描述
测试类Test。多态在成员方法中的使用规则为:编译看左边,执行看右边,即编译的时候,看Animal类,里面有eat()方法,通过;执行的时候,执行的是Cat类中的eat()方法,所以最终结果为:猫吃老鼠。
在这里插入图片描述
备注:成员变量和成员方法执行的时候为什么不一样呢?
因为成员方法有重写,而成员变量没有。

  • 3、强制转换

我们知道,使用多态,提高了程序的扩展性,但是有一个弊端,就是测试类中不能调用子类自己的特有的方法。
在这里插入图片描述
那怎么解决这个问题呢?可以运行强制转换。
在这里插入图片描述

  • 4、新添加个子类
    比如说,我们新添加个子类-Dog类,那子类和测试类中应该怎么写呢?
    在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qsbbl/article/details/82778619