java进阶学习5

继承 抽象类 学生信息系统代码优化

一、继承

1、定义:类与类之间产生关系,即子父类关系

2、格式:public class 子类名 extends 父类名{}

3、父类又称:基类、超类

4、子类又称:派生类

5、使用条件:类与类之间存在共性内容,产生is a的关系,考虑使用继承

6、note:java只支持单继承,不支持多继承,但支持多层继承

7、单继承:子类只能继承一个父类,不能同时继承多个父类

8、多层继承:子类A继承父类B,父类B可继承父类C

€1 单继承和多层继承练习:

8b486761c1804b2e9a549d6869d660be.png

8b53e0a5838c4157a7da8b5e47afd7be.png 

0aa41acda8ec4b828b6c7d735bd05cd6.png 

a18254ecad524fd5bfa03fcc9652555c.png 

b34ae8bd9ef64cf1a3b888d0dc626f98.png 

二、继承关键字this、super以及成员访问特点

this:限定指本类成员

super:限定指父类成员

1、成员变量访问特点: 

子类方法中访问一个变量:子类局部范围查找—子类成员范围查找—父类成员范围查找

note:子父类出现重名变量时,就近原则优先访问子类中的,要想用父类变量需要super限定

€2 this和super使用练习(此处省略创建对象打印变量过程)

b65fdc8bb0cc460f87413275af8081e6.png

bc7b42c126e44a3fb51235a10c2defc2.png  9929ec5f2ce84c77af71169ad2e3c35e.png

2、成员方法访问特点:子类成员范围查找—父类成员范围查找

€3 继承体系中,成员方法调用练习

fcface6dd7ea446286f8a1f44ad91bcf.png

cf32af60bed342388bcd3d7eb89331e7.png 

5431c30f27b64d14a684616a8c0a7a09.png 

9eeb1fc8c5244c4094dc1fde89a50338.png  

3、方法重写:继承体系中,子类出现和父类一模一样的方法声明

应用场景:子类需要父类功能,功能主题有子类自己特有内容,此时可重写父类中的方法

€4 手机类和新手机类的练习

1ed422f2023a44b2af658a26ed8c331a.png

notes:

(1)父类中的private方法不能被重写

(2)父类中static方法,子类通过static方法重写;父类中非static方法,子类通过非static方法重写

(3)访问权限:子类>父类

4、构造方法访问特点:

(1)子类中所有方法默认都访问父类无参构造方法,即父类数据首先完成初始化

(2)构造方法第一条语句默认都是super();

(3)未指定父类的类中继承object类中的无参构造方法

(4)父类没有无参构造方法时:

(i)子类通过super,调用父类含参构造方法

(ii)子类通过this调用本类其他构造方法,本类其他构造方法通过super调用父类含参构造方法

€5 继承体系中,构造方法访问练习(父类有无参构造方法)

a2ea28603fb8484c955080ce62b5f588.png

574c299ad6c1423dad6044f93ae26033.png 

4109d166cb534e88ab42e7c59be64205.png 

2ad71010b68346ba83423628436beb9b.png 

 (父类没有无参构造方法)

69d6ce9f0d26447ba67200233bfff803.png

288641e2fd054074b1311321f5a4aec9.png 

2463c50aa1da40a5b4a1f0f8ce7c06aa.png 

3556e6c8948a47ec86e547f365ddebf9.png 

ce58687fb3a64e8c9ae21b4501bf7a82.png  

note:

(1)this和super总结

44e58de2493a468a96fe5bdda386d22d.png

(2)继承体系内存图解

c242e7b563f94f6a986a8f50270cfe02.png

三、抽象类

1、抽象方法:将共性的行为(方法)抽取到父类之后,该方法实现逻辑无法在父类中给出具体明确,该方法可以定义为抽象方法

2、抽象类:一个类中存在抽象方法,该类必须声明为抽象类

3、抽象方法格式:public abstract 返回值类型 方法名(参数类型 参数);

4、抽象类格式:public abstract class 类名{}

5、notes:

(1)抽象类不能实例化

(2)抽象类中不一定有抽象方法,有抽象方法一定是抽象类

(3)可以有构造方法

(4)抽象类的子类:(i)重写抽象类所有抽象方法(ii)也是抽象类

€6 抽象类练习

38dfc4c9e6ed4f43adfde2405a08fcec.png

 c31cbd2ce6ad4c81ac371f02c4e038c3.png

a9ec78ae98034d54b66966953ce29bb4.png 

455e77658685412cbb98d977a86ce0c7.png 

e128919725204c39886d04f81f3f8cc9.png 

2c8dd7b33e1049e7bb7e8c2ff557ef65.png  

四、抽象类关键字final、模版设计模式、代码块

1、final关键字:可修饰方法、变量、类

修饰方法:表明该方法是最终方法,不能被重写

修饰变量:

(1)基本类型变量:数据值不变,即变量成常量

(2)引用类型变量:地址值不变,地址里面的内容可以改变

修饰类:表明该类是最终类,不能被继承

2、模版设计模式:抽象类整体看作模版,模版中不能决定的东西定义为抽象方法,让使用模版的类(继承抽象类的类)重写抽象方法实现需求

3、代码块:{}括起来的部分统称为代码块

(1)局部代码块

定义:方法中定义

作用:限定变量生命周期,及早释放,释放内存利用率

(2)构造代码块

定义:类中方法外定义

特点:每次构造方法执行都会执行此处代码块,且先于构造方法执行

作用:抽取多个构造方法中相同代码块,提高代码复用性

(3)静态代码块

定义:类中方法外

特点:static修饰,跟随类一起加载,只执行一次

作用:类加载时完成数据初始化

五、学生信息系统利用继承体系、抽象类、代码块初步优化

(1)从teacher和student两个类向上抽取父类person

9b435b4327b244eb8a262a507688484f.png

e8653e6fe4e346b2a3ccef30d42a9e96.png 

41a77a61737046fe96ad80dfdd0f32a2.png  

(2)从StudentController类中抽取父类BaseStudentController(注意子类中抽象方法重写)

6041e091bbc44eb3aa76fecf67629a91.png

8f681bdc153a4851aee125495cc49514.png  

(3)通过static代码块初始化存储容器StudentDao

f21f94b43c874b3f9c9ba93a16d779e5.png

6f38f32a596d4fe3bd6113d34e3d097d.png  

(4)存储容器由数组改变为集合

de17d8550ff74262aea222bda0f3feac.png

e27ace60b4d34a67a043da1964abf74f.png 

3039ba56ca1b40fda989721af6705455.png  

(5)两个存储容器向上抽取父类BaseStudentDao,采用继承体系优化

348739e119cf458585b475ed22e01c6a.png  

最后,从系统可以看出继承的优劣:

优:(1)提高代码复用性(2)提高代码维护性:从父类层面完成对成员的增删改查(3)类与类之间产生关系是多态的前提

劣:(1)继承是入侵性的(2)降低代码灵活性,子类必须拥有父类非私有属性和方法(3)增强代码耦合性

Java进阶学习路线通常包括以下几个阶段: 1. **基础知识**: - 学习基础语法:变量、数据类型、运算符、流程控制(如条件、循环)、数组、集合等。 - 熟悉面向对象编程(OOP)概念:类、对象、封装、继承、多态。 2. **中级技能**: - 掌握设计模式:单例、工厂、观察者、策略等,理解如何优化软件架构。 - 异常处理和IO流:异常处理机制,文件操作、网络通信等。 - 数据结构和算法:了解常用的数据结构(如栈、队列、链表、树、图),并能用Java实现基本算法。 3. **框架应用**: - Spring框架:深入学习Spring MVC和Spring Boot,理解依赖注入、AOP等高级特性。 - Hibernate或MyBatis:数据库访问层技术,ORM工具的学习和实践。 - 学习Java多线程和并发工具库(如synchronized、ExecutorService、Future、CompletableFuture)。 - 分布式系统原理:学习RPC(如RMI、Hessian、Thrift)和消息中间件(如JMS、RabbitMQ)。 5. **性能优化**: - 内存管理:垃圾回收机制,内存泄漏检测。 - 性能分析:使用JProfiler、VisualVM等工具进行性能监控和调优。 6. **实战项目**: - 实施一个大型企业级项目,涉及数据库设计、用户界面、业务逻辑等多个模块。 7. **持续学习**: - 阅读源码,如开源框架源码,提升编程能力。 - 关注新技术趋势,例如微服务、云计算、大数据处理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值