零基础入门学习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 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...
随机推荐
- S3C2440移植linux3.4.2内核之内核框架介绍及简单修改
目录 uboot启动内核分析 简单配置内核 编译内核 设置机器ID 修改晶振 uboot启动内核分析 进入cmd_bootm.c,找到对应的bootm命令对应的do_bootm(): int do ...
- 打包报错,提示UglifyJs Unexpected token: keyword «const»
https://blog.csdn.net/weixin_43473561/article/details/102816018 原因:ugluifyjs当前版本不符合项目预期(可能不能解析es6) 解 ...
- kubernetes scc 故障排查小记
1. 故障现象 环境在跑自动化测试时打印 error: [ ERROR ] Opening output file '/output.xml' failed: Read-only file syste ...
- 使用 nacos 搭建注册中心及配置中心
本文为博主原创,转载请注明出处: 在分布式微服务框架中,现在都流行使用 nacos 作为分布式框架的注册中心与配置中心.当我们搭建一套spring boot 框架的时候,默认会将配置文件 放在 res ...
- 在Vue中可以使用方括号法获得想要的对象数据吗?
1.问题 Document {{message}} {{school.name}}{{school[mobile]}} 在这里 {{school.name}}{{school[mobile]}} 不可 ...
- Linux-远程连接-ssh
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.1)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- 理解Asp.net MVC模式
MVC是模型(Model).视图(View).控制器(Controller)的缩写,它是Web应用程序中一种常用的架构模式.这种模式将应用程序大体上分为3层,即Model层.View层和Control ...
- [转帖]Oracle与防火墙
https://www.laoxiong.net/oracle_and_firewall.html 老熊 Oracle数据库管理 2009-04-20 最近有两次Oracle数据库故障与防火墙有关.这 ...
- [转帖]TiDB升级、TiFlash测试及对比ClickHouse
原创 NewSQL 作者:o烟雨潇潇o 时间:2020-05-13 11:53:16 4418 0 TiDB升级.TiFlash测试及对比ClickHouse ...