零基础入门学习Java课堂笔记 ——day06
面向对象(中)
1.封装
“高内聚,低耦合”
高内聚:类内部的细节自己完成,不允许外部干涉
低耦合:仅暴露少量方法给外部使用
属性私有
在Java中可以通过private关键字给方法类定义私有的属性,private关键字只允许本类使用私有的属性

如果想获取和更改属性值可以通过get/set获取或设置
编写Student.java如下

编写App.java如下:

总结:
- 提高系统安全性、保护数据。
- 隐藏代码的实现细节
- 统一接口
- 系统可维护性
2.继承
在Java中,我们可以使用extend使得子类继承父类
package pro;
public class Person {
String name = "";
int age = 0;
public Person(String name,int age){
System.out.println("You are creat a person");
this.age = age;
this.name = name;
}
public void say(){
System.out.println("You are good boy!!!");
}
private void say(String sentence){
System.out.println(sentence);
}
}
package pro;
import pro.Person;
public class Student extends Person{
public Student(String name, int age) {
super(name, age);//继承父类结构器
}
}
通过上面的代码,我们可以在子类对象调用父类public方法
package pro;
import pro.Student;
public class App {
public static void main(String[] args){
Student stu = new Student("Hu Xiao",18);
stu.say();
}
}
如果你不想让子类调用可以利用private关键词修饰方法

如果想只让子类调用可以使用protect关键词来修饰
(此处忽略1000行代码 略略~)
Java是单继承不是多继承
拓展:Java中的所有类都默认继承Object类
super
在Java语言中,如果子类想访问父类的属性可以通过继承的super关键词,如下:

package pro;
import pro.Student;
public class App {
public static void main(String[] args){
Student stu = new Student();
stu.changeName("HuMouRen");
}
}
输出结果为
HuMouRen
Student
Person
如果子类定义了构造器,就必须在构造器中添加super()方法在最前面,并且把父类所需要的参数通过这个方法传递给父类,父类构造器没有需要传递的参数可以省略super方法,Java将在编译时帮你定义
package pro;
public class Person {
protected String name = "Person";
public Person(String name){
this.name = name;
System.out.println("It's super.");
}
}
package pro;
import pro.Person;
public class Student extends Person{
private String name = "Student";
public Student(String name){
super(name);//必须在本类构造器代码前面
System.out.println("Hello world!!!");
}
}
如果我们一定要子类的构造器无参的话,可以通过重载的方法,对子类或者父类添加一个无参构造器即可
package pro;
public class Person {
protected String name = "Person";
public Person(String name){
this.name = name;
System.out.println("It's super.");
}
public Person(){
}
}
package pro;
import pro.Person;
public class Student extends Person{
private String name = "Student";
public Student(){
}
}
Super总结注意点:
super指的是父类对象
super调用父类的构造方法,必须在构造方法的第一个
super只能出现在子类的方法或者构造器
super和this不能同时调用构造方法
VS
This注意点:
- this指的是本类的对象
- this是本类的构造
重写
在Java中如果子类和父类有同样名称同样参数的方法,Java默认会调用父类的方法,将此操作称之为方法的重写
package pro;
public class Person {
public void test(){
System.out.println("It's Person test.");
}
}
package pro;
import pro.Person;
public class Student extends Person{
public void test(){
System.out.println("It's Student test.");
}
}
package pro;
import pro.Student;
public class App {
public static void main(String[] args){
Student stu = new Student();
stu.test();//It's Student test.
}
}
注意点:如果方法有static修饰,那么就不叫重写,只有不被static修饰的方法才能重写 如:
Person stu2 = new Student();
stu.test() //如果test方法由static修饰此处输出It's Person test.
总结:
前提:需要有继承关系且子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 继承后的方法修饰符可以扩大但不能缩小比如说原本是
- protect ===>public
- 抛出异常的范围,可以被缩小但不能扩大
从写子类的方法必须和父类要一致,方法体不同
3.多态
我们可以创建一个父类的对象指向子类,但父类的对象只能调用和子类共有的部分
package pro;
public class Person {
public void test(){
System.out.println("It's Person test.");
}
}
package pro;
import pro.Person;
public class Student extends Person{
public void test(){
System.out.println("It's Student test.");
}
public void eat(){
System.out.println("eat!!!");
}
}
package pro;
import pro.Student;
public class App {
public static void main(String[] args){
Student stu1 = new Student(); //Student==>Student
Person stu2 = new Student();//Person==>Student
Object stu3 = new Student();//Object==>Student
stu1.test(); //true
stu1.eat(); //true
stu2.test(); //true
stu3.test(); //false
stu2.eat(); //false
}
}
如果一定要对stu3和stu2执行操作的话,我们可以通过强制类型转换将其转换为Student
package pro;
import pro.Student;
public class App {
public static void main(String[] args){
Student stu1 = new Student();
Person stu2 = new Student();
Object stu3 = new Student();
stu1.test(); //true
stu1.eat(); //true
stu2.test(); //true
((Student)stu3).test(); //true
((Student)stu2).eat(); //true
}
}
总结:
- 多态是方法的多态属性没有多态
- 必须存在父类和子类的联系 否则:ClassCastException!
- 创建父类引用指向子类 且方法需要重写
- Father F1 = new Son();
- 没有重写,没有多态!!!
零基础入门学习Java课堂笔记 ——day06的更多相关文章
- 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案
国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- 《零基础入门学习Python》【第一版】视频课后答案第001讲
测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...
- 零基础入门学习Python(1)--我和Python的第一次亲密接触
前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...
- 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)
093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现
088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...
- 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则
080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...
- 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...
- 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用
056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...
- 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念
055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...
随机推荐
- 绿色数字园区运维:一屏群集 3D 可视化智慧楼宇
前言 在"新基建"驱动的数字经济热潮下,智慧园区建设发展成为实现园区管理绿色化.现代化.智慧化的核心抓手.通过利用云计算.物联网.大数据等新一代技术手段,充分聚合园区内各类资源,全 ...
- 【南大静态代码分析】作业 2:常量传播和 Worklist 求解器
作业 2:常量传播和 Worklist 求解器 题目链接:https://tai-e.pascal-lab.net/pa2.html 评测链接:https://oj.pascal-lab.net/pr ...
- 基于AHB_BUS的eFlash控制器设计-软硬件系统设计
eFlash软硬件系统设计 软硬件划分 划分好软硬件之后,IP暴露给软件的寄存器和时序如何? 文档体系:详细介绍eflash控制器的设计文档 RTL代码编写:详细介绍eflash控制器的RTL代码 1 ...
- apicloud(沉浸式导航篇) - 手机状态栏 有黑边的解决办法
在 index.html 的 apiready 中加上 第一种 : 可设置全屏 api.setFullScreen({ fullScreen: true }); 第二种:设置状 ...
- .NET周刊【1月第2期 2024-01-21】
国内文章 NCC Mocha v0.1.0 发布,.NET 开发的基于 OpenTelemetry 的 APM 系统 https://mp.weixin.qq.com/s/gUx-dqlYqcwgQN ...
- Nginx的日志处理
Nginx的日志处理 背景 之前一直被各种咨询nginx的使用问题. 大部分都是性能, 加模块, 以及一些tcp端口等的问题. 其实这些都还好, 还有一个比较麻烦的问题时日志相关的. nginx的日志 ...
- [转帖]给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引
https://zhuanlan.zhihu.com/p/142139541 MySQL的InnoDB索引数据结构是B+树,主键索引叶子节点的值存储的就是MySQL的数据行,普通索引的叶子节点的值存储 ...
- [转帖]火狐URL默认打开为HTTPS,切换成http形式
火狐在当前及未来版本默认URL采用HTTPS进行链接,但个人习惯,某些网站不是https,改http在响应超时状态也会切成https,将默认为http. edge,chrome 依然还是http为主要 ...
- [转帖]kingbase(人大金仓)的一些常用表操作语句
包括 1)创建表 2)删除表 3)加字段 4)字段换名 5)字段改类型 6)字段添加注释 7)修改字段为自增类型 8)增加主键 9)查看模式下的表 一.创建和删除表 DROP TABLE IF EXI ...
- [转帖]Java 认证与授权(JAAS)介绍
https://www.cnblogs.com/wuyongyin/p/16981469.html JAAS(Java Authentication Authorization Service),即 ...