0%
这是一片思考的空间 -- arthinking
Spring 重构&代码整洁之道 软件设计 JVM 并发编程 数据结构与算法 分布式 存储 网络 微服务 设计模式
Java技术栈 - 涉及Java技术体系

Java基础笔记 - 面向对象三个特征 继承、封装、多态及编程细节提示

面向对象三个特性:继续(Inheritence)、封装(Encapsulation)、多态(Polymorphism)

1、封装(Encapsulation):

类包含了数据与方法,将数据与方法放在一个类中就构成了封装。

1.1、对象在堆中的分配:

new关键字所做的工作:

① 为对象开辟内存空间

② 调用类的构造方法

③ 将生成的对象的地址返回

方法与属性的分配:

如果一个类包含了属性和方法,那么该类的每一个对象都有自己的属性,但是无论有多少个对象,这些对象共享一个方法。

1.2、封装中的构造方法:

重载:

构造方法重载时,只需看参数即可。

使用this():

在一个构造方法中调用另外一个构造方法,可以使用this(),this()中的参数根据调用的构造函数确定。this()语句必须作为构造方法的第一条语句。

2、继承(Inheritence):

Java是单继承的,意味着一个类只能继承一个父类,使用extends关键字。

2.1、继承中的构造方法:

继承关系中构造方法的调用:

生成子类对象时,Java默认地首先调用父类的不带参数的构造方法,并执行该构造方法,生成父类的对象。接下来才是调用子类的构造方法,生成子类的对象。(即是想要生成子类对象,必须先生成父类的对象,没有父类的对象就没有子类的对象)

使用super关键字:

super表示对父类对象的引用。

使用了super显示的调用父类的某个构造方法后,那么在执行的时候就寻找super()对应的够杂方法而不再寻找父类的不带参数的构造方法。super必须作为构造方法的第一条执行语句。

2.2、继承中父类与子类的关系:

① 父类有的,子类也有

② 父类没有的,子类可以有

③ 父类有的,子类可以改变

2.3、继承中需要注意的:

① 构造方法不能被继承

② 方法和属性可以被继承

③ 子类的构造方法隐式地调用父类的无参构造方法

④ 当父类没有不带参数的构造方法时,子类需要使用super关键字来显示调用父类的构造方法。super指的是父类的引用

⑤ super关键字必须是构造方法中的第一句。

2.4、继承中的方法重写:

当两个方法形成重写关系时,可以在子类中通过super关键字调用父类被重写的方法。此时的super关键字不必放在第一句,而是根据逻辑决定。

3、多态(Polymorphism):

多态指的是父类型的引用可以指向子类的对象。(苹果是水果,足球是球)

1
2
Parent p = new Child();
p.execute();

3.1、使用多态调用方法:

当使用多态调用方法时,首先检查父类中是否有被调用的方法,如果没有则编译出错;如果有,再去调用子类的方法。

3.2、多态中的两种类型转换:

① 向上类型转换(upcast):将子类型转换成父类型。对于向上类型转换,不需要显示指定:

1
Parent p = new Child();

② 向下类型转换(downcast):将父类型转换为子类型。对于向下类型转换,必须要显示指定,使用强制类型转换:

1
2
Parent p = new Child();
Child child = (Child)p;

以下的编译不会出错,运行时报错:

1
2
Parent p = new Parent();
Child child = (Child)p;

欢迎关注我的其它发布渠道

订阅IT宅
内功修炼
Java技术栈
Java架构杂谈是IT宅精品文章公众号,欢迎订阅:
📄 网络基础知识:两万字长文50+张趣图带你领悟网络编程的内功心法 📄 HTTP发展史:三万长文50+趣图带你领悟web编程的内功心法 📄 HTTP/1.1:可扩展,可靠性,请求应答,无状态,明文传输 📄 HTTP/1.1报文详解:Method,URI,URL,消息头,消息体,状态行 📄 HTTP常用请求头大揭秘 📄 HTTPS:网络安全攻坚战 📄 HTTP/2:网络安全传输的快车道 📄 HTTP/3:让传输效率再一次起飞 📄 高性能网络编程:图解Socket核心内幕以及五大IO模型 📄 高性能网络编程:三分钟短文快速了解信号驱动式IO 📄 高性能网络编程:彻底弄懂IO复用 - IO处理杀手锏,带您深入了解select,poll,epoll 📄 高性能网络编程:异步IO:新时代的IO处理利器 📄 高性能网络编程:网络编程范式 - 高性能服务器就这么回事 📄 高性能网络编程:性能追击 - 万字长文30+图揭秘8大主流服务器程序线程模型
📄 Java内存模型:如果有人给你撕逼Java内存模型,就把这些问题甩给他 📄 一文带你彻底理解同步和锁的本质(干货) 📄 AQS与并发包中锁的通用实现 📄 ReentrantLock介绍与使用 📄 ReentrantReadWriteLock介绍与使用 📄 ReentrantLock的Condition原理解析 📄 如何优雅的中断线程 📄 如何优雅的挂起线程 📄 图解几个好玩的并发辅助工具类 📄 图解BlockingQueue阻塞队列
📄 消息队列那么多,为什么建议深入了解下RabbitMQ? 📄 高并发异步解耦利器:RocketMQ究竟强在哪里? 📄 Kafka必知必会18问:30+图带您看透Kafka
📄 洞悉MySQL底层架构:游走在缓冲与磁盘之间 📄 SQL运行内幕:从执行原理看调优的本质 📄 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法