面向对象(中)

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. Flink DataStream API 编程模型

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...

  2. 【收藏】制作艺术二维码,用 Stable Diffusion 就行!

    [收藏]Stable Diffusion 制作光影文字效果 https://www.cnblogs.com/Serverless/p/17620406.html 基于函数计算FC 快捷部署 Stabl ...

  3. GCC 指定运行期动态链接库搜索路径

    链接器 ld 的 -rpath=dir 选项可以指定运行期 so 文件的搜索路径. GCC 的 -Wl,option 选项可以传递选项给链接器 ld. 所以组合起来,可以直接使用 -Wl,-rpath ...

  4. FGC频繁导致CPU 飙升定位及JVM配置优化总结

    本文为博主原创,未经允许不得转载: 目录: 1. 定位消耗cpu 的服务进程和线程 2. 定位FGC 的原因 3. 定位jvm 参数是否导致FGC 4. 调试最优解的 jvm 配置 描述:项目中存在一 ...

  5. Hystrix 实现服务熔断与降级

    本文为博主原创,未经允许不得转载: 目录: 1. 服务雪崩,服务熔断,服务降级概念 2. Hystrix 概念 3. Hystrix 使用及默认配置 4. @HystrixCommond 注解使用 5 ...

  6. 【Linux API 揭秘】module_init与module_exit

    [Linux API 揭秘]module_init与module_exit Linux Version:6.6 Author:Donge Github:linux-api-insides 1.函数作用 ...

  7. 使用markdown语法做笔记,相比txt多了很多样式

  8. [转帖]使用 TiUP cluster 在单机上安装TiDB

    https://zhuanlan.zhihu.com/p/369414808   TiUP 是 TiDB 4.0 版本引入的集群运维工具,TiUP cluster 是 TiUP 提供的使用 Golan ...

  9. [转帖]tidb 如何对 TiDB 进行 TPC-C 测试

    https://docs.pingcap.com/zh/tidb/stable/benchmark-tidb-using-tpcc TPC-C 是一个对 OLTP(联机交易处理)系统进行测试的规范,使 ...

  10. [转帖]鲲鹏性能优化十板斧——鲲鹏处理器NUMA简介与性能调优五步法

    https://www.cnblogs.com/huaweicloud/p/12166354.html 1.1 鲲鹏处理器NUMA简介 随着现代社会信息化.智能化的飞速发展,越来越多的设备接入互联网. ...