JAVA基础--JAVA SE(知识点总结 Ⅴ )
前面内容请见:
JAVA基础–JAVA SE(知识点总结 Ⅰ )
JAVA基础–JAVA SE(知识点总结 Ⅱ )
JAVA基础–JAVA SE(知识点总结 Ⅲ )
JAVA基础–JAVA SE(知识点总结 Ⅳ )
以下是我们今天的内容:
本文目录:
- 面向对象
- 1.继承
- 2.final关键字
- 3.多态
- 4.抽象类
- 5.接口
面向对象
1.继承
将多个类的共性内容抽取出来,放在一个独立的类中,让这个独立的类和其他类产生一种关系
- “继承” ----> 关键字 extends
格式
class 父类名{共性内容:姓名,年龄.....提供公共的访问方法setXXX()/getXXX()}class 子类名 extends 父类名{}
优点
可以提高代码复用性
可以提高代码的维护性,后期便于维护,针对子类和父类进行维护(子父关系明确)
类与类产生的继承关系,是"多态"的前提条件
在Java中有一个开发原则 "低耦合,高内聚"(Java设计模式都需要遵循这一个原则)* 耦合性:开发中是永远避免不了,可以降低(耦合:类和类的关系)* 内聚性:指的是某个类完成某个功能的一种能力; 尽量不要产生继承关系来完成一个功能,尽量一个类能完成一个类完成;* 低耦合:降低耦合性,减少类和类的关系;
特点
在Java语言中,类和的类的关系是一种继承关系,这个继承只能支持"单继承",不支持多继承
class 父{}class 父2{}class 子 extends 父,父2{} //多继承:不支持 错class 子 extends 父{} //正常的语法格式 对
类和类关系,虽然不支持多继承,但是层层单继承----> 多层继承
//定义父类 class GrandFather{public void method(){System.out.println("我是爷爷");} } //定义父类 class Father extends GrandFather{public void show(){System.out.println("我是父亲");} } //父类 //class Mother{} //子类 //class Son extends Father,Mother{} //子类不能继承多个父类,多继承语法不支持 class Son extends Father{//自己的特有功能public void playGame(){System.out.println("会玩游戏");} } public class ExtendsDemo {public static void main(String[] args) {//创建Son类对象Son s = new Son() ;s.show(); //访问父亲的方法s.method();//访问爷爷的方法(method方法间接继承过来)s.playGame(); //访问自己的方法}
注意:
子类继承父类,对于非私有的成员,直接可以继承过来,但是如果是私有成员,它可以通过公共的访问去访问,但不是直接访问的
被私有修饰的东西(成员变量/成员方法),只能在当前类访问的
在继承关系中,构造方法的访问问题(重点):
子类继承父类,子类的所有构造方法都默认访问父类的无参构造方法
为什么?
子类继承父类,会用到父类的数据,需要让父类先进行初始化; 一个类初始化的---肯定需要执行构造方法的
如果一个父类存在有参构造方法,没有无参构造方法,子类的所有构造会出现什么问题?出现了问题,怎么解决?
子类的所有全部构造方法报错,子类继承父类,子类的所有构造方法都默认访问父类的无参构造方法
解决方案1:
手动给出无参构造方法
public 类名(){}
解决方案2:
假设,人家现在就不需要让你给出父类的无参构造方法,就需要让子类的构造方法,显示的访问父类的有参构造方法 * 要使用关键字 <strong>super</strong>:代表父类空间标识(代表的父类对象的地址值引用)* super() :访问父类的无参构造方法* super(xxx) :访问父类的有参构造方法* 这些super一定是在子类构造方法中的第一句话
解决方案3:
保证子类的所有的构造方法某一个构造方法,让父类初始化完毕即可;
先通过子类的无参构造方法里面---this(xxx):访问本类(子类)有参构造方法
再子类的有参构造方法的第一话:让父类初始化 super(xxx):间接访问父类的有参构造方法
子类继承父类,一定要先执行父类的构造方法,初始化完毕之后;然后才能执行子类的构造方法---分层初始化
注意: 子类在隐藏了一个super(),所以先要访问父类构造方法,在执行子类,如果有super(xxx),则super()不自动创建
- 子类继承父类,成员变量的访问问题:
- 情况1: 子类和父类的中成员变量名称不一致,访问时,只要分别访问即可
- 情况2: 子类和父类的成员变量名称一致,访问时:
- 先在子类的局部位置找,有没有这个变量,如果有就使用
- 要是没有,在子类成员位置中继续找,有没有这个变量,如果有就使用
- 要是子类的成员位置也没有,那么会在父类的成员位置继续找,看有没有这个变量,有的话就使用
- 如果父类的成员位置同样还没有的话,则会报错(前提:这个父类没有它的父类了),说明整个子父类中都没有变量
- 遵循"就近原则"
如果是向上转型的时候,父类名 对象名 = new 子类名; ---- > 成员变量输出为父类的值
//父类 class Person{int age = 20; } //子类class Man extends Person{int age = 40; } public class Test{public static void main(String[] args){Person person = new Man();System.out.println(person.age); //20} }
想要输出子类成员变量值需要用到向下转型(具体后面会分析)
子类继承父类,关于成员方法的访问:
情况1:子类和父类的成员方法名称不一致,调用时,只要分别调用就可以
情况2:子类和父类的成员方法一模一样时(权限修饰符,返回值类型,参数列表都一样)
- 子类将父类的方法覆盖了---->方法重写 :Override---->子类在父类的基础上,将父类的覆盖了,使用自己的功能;
public class Person {//确定属性private String name;private int age;private String professional;//无参public Person() {}//有参public Person(String name, int age, String professional) {this.name = name;this.age = age;this.professional = professional;}......//定义方法public void eat(){System.out.println("都喜欢吃");}public void show(){System.out.println("姓名:" + name + "\n" + "年龄:" + age + "\n" + "职业:" + professional);} } //子类 public class SourthPerson extends Person{public SourthPerson() {}......@Override //重写public void eat() {System.out.println("南方人喜欢吃大白米饭");} } //测试类 public class PersonTest {public static void main(String[] args) {//无参--南方SourthPerson sourthPerson = new SourthPerson();sourthPerson.setName("张三");sourthPerson.setAge(33);sourthPerson.setProfessional("商人");sourthPerson.show();sourthPerson.eat();sourthPerson.favorite();} }
补充:
类加载的时候,内存是很快的(继承关系)
父类和子类与静态相关的先执行
静态的东西优先于对象存在 (类名 对象名 = new 类名()
JAVA基础--JAVA SE(知识点总结 Ⅴ )相关推荐
- Java基础----Java编程语言概述
Java基础----Java编程语言概述 文章目录 Java基础----Java编程语言概述 Java编程语言概述 1-1 软件开发介绍 1.1软件开发介绍 1.2 常用命令 1-2 计算机编程语言介 ...
- Java基础-Java中的堆内存和离堆内存机制
Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnblogs.com/yinzhengjie/p/9 ...
- Java基础-JAVA中常见的数据结构介绍
Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...
- Java基础-Java中的内存分配与回收机制
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二. 转载于:https://www.cnblogs.com/yinzhengji ...
- Java基础——Java多继承的三种实现方式
Java基础--Java"多继承"的三种实现方式 Java语言本身只支持单继承(每个类只能有一个父类),但单继承的局限性很大,因此,可以通过以下的方式实现"多继承&quo ...
- [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别
[重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别 Read 读入方法 read(): 一般是这种形式 public int read() 1.从流数据中读取的 ...
- Java基础-Java中常用的锁机制与使用
Java基础-Java中常用的锁机制与使用 锁lock或互斥mutex是一种同步机制,主要用于在存在多线程的环境中强制对资源进行访问限制.锁的主要作用为强制实施互斥排他以及并发控制策略.锁一般需要硬件 ...
- 2.7w字!Java基础面试题/知识点总结!(2021 最新版)
这篇<Java 基础知识总结>是 JavaGuide 上阅读量最高的一篇文章,由于我对其进行了重构完善并且修复了很多小问题,所以,我再同步一下! 文章内容比较多,目录如下: 基础概念与常识 ...
- Java基础-Java概述(第一、二章)
Java基础 文章目录 Java基础 1. Java概述(第一.二章) 1.1 Java基本介绍 1.2 Java的运行机制及运行过程 1.3 Java环境配置 1.4 Java快速入门 1.5 Ja ...
最新文章
- 漫步数学分析番外五(下)
- jQuery 源码系列(四)Tokens 词法分析
- lwip-1.4.1文档sys_arch翻译
- 转:Real6410 Linux 常见问题总结(截至2010/07/26)
- 接口测试——测试用例执行
- 在ubuntu 20.04 上 安装 onnxruntime CUDA
- 这十个Python实战项目,让你瞬间读懂Python!
- RSA算法和SM2算法对比
- apple script to 1s screen capture snapshot w/ windowsill
- Java实现 蓝桥杯VIP 算法提高 字符串跳步
- 投掷骰子的python代码_模拟骰子(Python),掷骰子
- java 生成根据图片内容生成图片包含格式有【png jepg GIF tiff wbmp】
- DJI大疆创新招聘-自动化测试工程师
- 分分钟上手C#的委托和事件
- 水果店怎么保鲜水果,水果店损耗率是多少
- Dew Lab广泛的库,MtxVec包含大量矢量化矩阵
- abaqus失效单元删除_单元失效与删除 Element Deletion
- 一款仿《饿了么》订餐应用源码【iOS源码分享】
- 百度区块链狗子四只领取链接
- 魔獸爭霸三 (WARCRAFT 3: REIGN OF CHAOS)---秘技
热门文章
- 微信网页版协议分析和实现机器人
- python 生成html文件浏览器,pycharm中怎么生成HTML文档并在浏览器查看HTML文档
- 1-网络字节序和ip地址
- 项目四 无线网络配置(使用华为模拟器eNSP)
- 厉害了!全国多地5G/4G基站共建共享落地图集来啦!
- 极域2015,学生连不上教机,广播黑屏
- html5中底部对齐怎么写,css设置元素底部垂直对齐
- nginx解决微信头像canvas跨域问题
- 单片机原理及应用技术课后答案(5)
- TTU智能配电终端_配电物联网建设火热,“智能配变终端TTU” C位出道!