面向对象(中)

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. S3C2440移植linux3.4.2内核之内核框架介绍及简单修改

    目录 uboot启动内核分析 简单配置内核 编译内核 设置机器ID 修改晶振 uboot启动内核分析   进入cmd_bootm.c,找到对应的bootm命令对应的do_bootm(): int do ...

  2. 打包报错,提示UglifyJs Unexpected token: keyword «const»

    https://blog.csdn.net/weixin_43473561/article/details/102816018 原因:ugluifyjs当前版本不符合项目预期(可能不能解析es6) 解 ...

  3. kubernetes scc 故障排查小记

    1. 故障现象 环境在跑自动化测试时打印 error: [ ERROR ] Opening output file '/output.xml' failed: Read-only file syste ...

  4. 使用 nacos 搭建注册中心及配置中心

    本文为博主原创,转载请注明出处: 在分布式微服务框架中,现在都流行使用 nacos 作为分布式框架的注册中心与配置中心.当我们搭建一套spring boot 框架的时候,默认会将配置文件 放在 res ...

  5. 在Vue中可以使用方括号法获得想要的对象数据吗?

    1.问题 Document {{message}} {{school.name}}{{school[mobile]}} 在这里 {{school.name}}{{school[mobile]}} 不可 ...

  6. Linux-远程连接-ssh

  7. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.1)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  8. 理解Asp.net MVC模式

    MVC是模型(Model).视图(View).控制器(Controller)的缩写,它是Web应用程序中一种常用的架构模式.这种模式将应用程序大体上分为3层,即Model层.View层和Control ...

  9. [转帖]Oracle与防火墙

    https://www.laoxiong.net/oracle_and_firewall.html 老熊 Oracle数据库管理 2009-04-20 最近有两次Oracle数据库故障与防火墙有关.这 ...

  10. [转帖]TiDB升级、TiFlash测试及对比ClickHouse

    原创 NewSQL 作者:o烟雨潇潇o 时间:2020-05-13 11:53:16  4418  0 TiDB升级.TiFlash测试及对比ClickHouse                   ...