零基础入门学习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 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...
随机推荐
- Flink DataStream API 编程模型
Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...
- 【收藏】制作艺术二维码,用 Stable Diffusion 就行!
[收藏]Stable Diffusion 制作光影文字效果 https://www.cnblogs.com/Serverless/p/17620406.html 基于函数计算FC 快捷部署 Stabl ...
- GCC 指定运行期动态链接库搜索路径
链接器 ld 的 -rpath=dir 选项可以指定运行期 so 文件的搜索路径. GCC 的 -Wl,option 选项可以传递选项给链接器 ld. 所以组合起来,可以直接使用 -Wl,-rpath ...
- FGC频繁导致CPU 飙升定位及JVM配置优化总结
本文为博主原创,未经允许不得转载: 目录: 1. 定位消耗cpu 的服务进程和线程 2. 定位FGC 的原因 3. 定位jvm 参数是否导致FGC 4. 调试最优解的 jvm 配置 描述:项目中存在一 ...
- Hystrix 实现服务熔断与降级
本文为博主原创,未经允许不得转载: 目录: 1. 服务雪崩,服务熔断,服务降级概念 2. Hystrix 概念 3. Hystrix 使用及默认配置 4. @HystrixCommond 注解使用 5 ...
- 【Linux API 揭秘】module_init与module_exit
[Linux API 揭秘]module_init与module_exit Linux Version:6.6 Author:Donge Github:linux-api-insides 1.函数作用 ...
- 使用markdown语法做笔记,相比txt多了很多样式
- [转帖]使用 TiUP cluster 在单机上安装TiDB
https://zhuanlan.zhihu.com/p/369414808 TiUP 是 TiDB 4.0 版本引入的集群运维工具,TiUP cluster 是 TiUP 提供的使用 Golan ...
- [转帖]tidb 如何对 TiDB 进行 TPC-C 测试
https://docs.pingcap.com/zh/tidb/stable/benchmark-tidb-using-tpcc TPC-C 是一个对 OLTP(联机交易处理)系统进行测试的规范,使 ...
- [转帖]鲲鹏性能优化十板斧——鲲鹏处理器NUMA简介与性能调优五步法
https://www.cnblogs.com/huaweicloud/p/12166354.html 1.1 鲲鹏处理器NUMA简介 随着现代社会信息化.智能化的飞速发展,越来越多的设备接入互联网. ...