面向对象(中)

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的更多相关文章

  1. 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...

  2. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  3. 《零基础入门学习Python》【第一版】视频课后答案第001讲

    测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...

  4. 零基础入门学习Python(1)--我和Python的第一次亲密接触

    前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...

  5. 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封装 ...

  6. 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现

    088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...

  7. 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则

    080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...

  8. 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和

    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...

  9. 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用

    056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...

  10. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

随机推荐

  1. 绿色数字园区运维:一屏群集 3D 可视化智慧楼宇

    前言 在"新基建"驱动的数字经济热潮下,智慧园区建设发展成为实现园区管理绿色化.现代化.智慧化的核心抓手.通过利用云计算.物联网.大数据等新一代技术手段,充分聚合园区内各类资源,全 ...

  2. 【南大静态代码分析】作业 2:常量传播和 Worklist 求解器

    作业 2:常量传播和 Worklist 求解器 题目链接:https://tai-e.pascal-lab.net/pa2.html 评测链接:https://oj.pascal-lab.net/pr ...

  3. 基于AHB_BUS的eFlash控制器设计-软硬件系统设计

    eFlash软硬件系统设计 软硬件划分 划分好软硬件之后,IP暴露给软件的寄存器和时序如何? 文档体系:详细介绍eflash控制器的设计文档 RTL代码编写:详细介绍eflash控制器的RTL代码 1 ...

  4. apicloud(沉浸式导航篇) - 手机状态栏 有黑边的解决办法

    在 index.html 的  apiready 中加上 第一种 : 可设置全屏 api.setFullScreen({          fullScreen: true   }); 第二种:设置状 ...

  5. .NET周刊【1月第2期 2024-01-21】

    国内文章 NCC Mocha v0.1.0 发布,.NET 开发的基于 OpenTelemetry 的 APM 系统 https://mp.weixin.qq.com/s/gUx-dqlYqcwgQN ...

  6. Nginx的日志处理

    Nginx的日志处理 背景 之前一直被各种咨询nginx的使用问题. 大部分都是性能, 加模块, 以及一些tcp端口等的问题. 其实这些都还好, 还有一个比较麻烦的问题时日志相关的. nginx的日志 ...

  7. [转帖]给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引

    https://zhuanlan.zhihu.com/p/142139541 MySQL的InnoDB索引数据结构是B+树,主键索引叶子节点的值存储的就是MySQL的数据行,普通索引的叶子节点的值存储 ...

  8. [转帖]火狐URL默认打开为HTTPS,切换成http形式

    火狐在当前及未来版本默认URL采用HTTPS进行链接,但个人习惯,某些网站不是https,改http在响应超时状态也会切成https,将默认为http. edge,chrome 依然还是http为主要 ...

  9. [转帖]kingbase(人大金仓)的一些常用表操作语句

    包括 1)创建表 2)删除表 3)加字段 4)字段换名 5)字段改类型 6)字段添加注释 7)修改字段为自增类型 8)增加主键 9)查看模式下的表 一.创建和删除表 DROP TABLE IF EXI ...

  10. [转帖]Java 认证与授权(JAAS)介绍

    https://www.cnblogs.com/wuyongyin/p/16981469.html JAAS(Java Authentication Authorization Service),即 ...