详解java封装继承多态

 更新时间:2019年03月28日 09:08:22   作者:海绵爱上星  
这篇文章主要介绍了java封装继承多态,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

面向对象编程(Object Oriented Programming)有三大特性:封装、继承、多态。在这里,和大家一起加深对三者的理解。

封装

封装可以拆开理解,装,是把数据和方法放进了类里;封,把装进去的数据和成员方法加上访问权限。对于外界,内部细节是透明的,暴露给外面的是它的访问方法。

继承

继承,是为了重用父类代码。两个类若具有is a的关系就可以用extends。另外,继承也为实现多态做了铺垫。

多态

程序中定义的引用变量(java有两大数据类型,内部数据类型和引用数据类型)所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量到低指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在程序运行期间才能决定。
在理解多态时,总是逃不掉“向上转型”。

问题的核心在于,一般情况下,在子类继承父类后,子类具有父类的所有成员和方法。但是在向上转型之后,子类中一些独有的成员和方法对于该父类类型的引用变量则“不可见”。

实例

package binaryheap.test;

import java.awt.image.SinglePixelPackedSampleModel;

//创建一个Animal类
class Animal {
	public void run() {
		System.out.println("Animal在奔跑!!!");
		sing();
	}

	public void sing() {
		System.out.println("Animal在唱歌~~~");
	}

}

//创建一个子类继承父类
class Lion extends Animal {

	// 重载run()方法,和父类中的run()方法不是一个
	// 向上转型时会丢失该方法
	public void run(String anotherAnimal) {

		System.out.println(("Lion在追一只" + anotherAnimal));;
		sing();
	}

	// 重写
	public void sing() {
		System.out.println("Lion在唱歌~~~");
	}

}

public class BH {

	public static void main(String[] args) {
		// 创建一个父类引用,但是指向Lion对象
		Animal animal = new Lion();
		animal.run();
	}
}

结果:

Animal在奔跑!!!
Lion在唱歌~~~

Animal animal = new Lion(); 向上转型后的Animal类型的引用,丢失了重载的方法run(),即子类中的run(),指向的是父类的run(),因此输出“Animal在奔跑”,而不是“Lion在奔跑”。run()方法中调用了sing()方法,因为sing()方法被重写,引用能够找到sing()方法,因此引用调用此sing()方法(动然调用),输出“Lion在唱歌”。

实现多态的必要条件为:继承、重写、向上转型(或者说父类引用指向子类对象)。其实现机制为:调用那个方法是由被引用对象的类型决定,而不是引用变量的类型决定的,并且这个被调用的方法必须是被子类重写过的。

总结:

  1. 使用父类的引用指向子类对象
  2. 该引用只能调用父类中定义的方法和变量
  3. 若子类重写了父类的一个方法(只能重写方法,不能重写变量,否则编译时期会报错),那么调用的时候会调用子类的这个方法。

此外,在多态引用时,可能会涉及到超类的构造方法。调用超类的构造方法的顺序是先调用最远的超类的构造方法。

以上所述是小编给大家介绍的java封装继承多态详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java两大工具库Commons和Guava使用示例详解

    Java两大工具库Commons和Guava使用示例详解

    这篇文章主要为大家介绍了Java两大工具库Commons和Guava使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Java中LinkedHashSet、LinkedHashMap源码详解

    Java中LinkedHashSet、LinkedHashMap源码详解

    这篇文章主要介绍了Java中LinkedHashSet、LinkedHashMap源码详解,LinkedHashMap是一个以双向链表的方式将Entry节点链接起来的HashMap子类,它在HashMap的基础上实现了更多的功能,具有顺序存储和遍历的特性,需要的朋友可以参考下
    2023-09-09
  • Java Jwt库的简介及使用详解

    Java Jwt库的简介及使用详解

    JWT 是开放的行业标准RFC7591,用来实现端到端安全验证,就是通过一些算法对加密字符串和JSON对象之间进行加解密,下面通过本文给大家介绍Java Jwt库的简介及使用,感兴趣的朋友一起看看吧
    2021-11-11
  • Lucene源码系列多值编码压缩算法实例详解

    Lucene源码系列多值编码压缩算法实例详解

    这篇文章主要为大家介绍了Lucene源码系列多值编码压缩算法实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • java爬虫Jsoup主要类及功能使用详解

    java爬虫Jsoup主要类及功能使用详解

    这篇文章主要为大家介绍了java爬虫Jsoup主要类及功能使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Springboot如何统一处理Filter异常

    Springboot如何统一处理Filter异常

    这篇文章主要介绍了Springboot如何统一处理Filter异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java使用xstream实现xml文件和对象之间的相互转换

    java使用xstream实现xml文件和对象之间的相互转换

    xml是一个用途比较广泛的文件类型,在java里也自带解析xml的包,但是本文使用的是xstream来实现xml和对象之间的相互转换,xstream是一个第三方开源框架,使用起来比较方便,对java xml和对象转换相关知识感兴趣的朋友一起看看吧
    2023-09-09
  • java gui实现计算器小程序

    java gui实现计算器小程序

    这篇文章主要为大家详细介绍了java gui实现计算器小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 详解spring 配置的两种方式:JAVA配置和注解配置

    详解spring 配置的两种方式:JAVA配置和注解配置

    这篇文章主要介绍了详解spring 配置的两种方式:JAVA配置和注解配置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Spring集成PageHelper的简单用法示例

    Spring集成PageHelper的简单用法示例

    这篇文章主要介绍了Spring集成PageHelper的简单用法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论