零基础入门学习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 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...
随机推荐
- 一、mysql5.7 rpm 安装(单机)
一.下载需要的rpm包mysql-community-client-5.7.26-1.el6.x86_64.rpmmysql-community-common-5.7.26-1.el6.x86_64. ...
- P1064-DP【绿】
好多好多天前写了这道题的50分代码,然后不知道错在哪里反复调没调对.然后这周我极度忙,忙死了,好不容易有一点时间再来审视这道题了,然后我5分钟想明白了一切...意识到自己此前的错误有多弱智... 把D ...
- 分享10个高级sql写法
本文主要介绍博主在以往开发过程中,对于不同业务所对应的 sql 写法进行归纳总结而来.进而分享给大家. 本文所讲述 sql 语法都是基于 MySql 8.0+ 博主github地址:http://gi ...
- C#对字符串进行加密解密
首先上效果图 加解密接口 internal string ToEncrypt(string encryptKey, string str) { try { byte[] P_byte_key = // ...
- shell脚本(1)-shell介绍
一.shell介绍 1.什么是shell shell是c语法编写的,是用户和liunx内核沟通的桥梁,即是命令语法,也是解释性编程语言. 内核处理的都是二进制,而用户处理的都是高级语法,系统开发人员可 ...
- VMto阿里云的简单过程
VMto阿里云的简单过程 第一步打开网站 https://smcnext.console.aliyun.com/sourceServers/importMigrationSource?spm=5176 ...
- [转帖]OceanBase v4.2新增字符集GB18030_2022说明
OceanBase v4.2新增字符集GB18030_2022说明 https://open.oceanbase.com/blog/7698399520 1. 概述 GB18030 标准作为信息技术 ...
- [转帖]网站开启 IPv6 的三种方式
https://zhuanlan.zhihu.com/p/443835798 从传统二进制部署的 Nginx ,到云原生部署的 K8S.Istio,分别介绍网站开启 IPv6 的三种方式. 1.Ngi ...
- [转帖]clickhouse存储机制以及底层数据目录分布
https://www.cnblogs.com/MrYang-11-GetKnow/p/15818141.html#:~:text=%E6%AF%8F%E4%B8%80%E4%B8%AA%E6%95% ...
- [转帖]Percolator - 分布式事务的理解与分析
https://zhuanlan.zhihu.com/p/261115166 Percolator - 分布式事务的理解与分析 概述 一个web页面能不能被Google搜索到,取决于它是否被Googl ...