面向对象(中)

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. 2、springboot创建多模块工程

    系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...

  2. C++大整数类

    用法 把头文件和源代码文件放在同一目录下,然后#include"INT"即可使用.你能对int类的变量进行a=2,a+=3,a%8,a--等等操作,那你就也能对INT进行.INT基 ...

  3. apache-jmeter-5.6.3版本报错:errorlevel=1的解决办法

    一.背景: 今天遇到了apache-jmeter-5.6.3版本,下载解决后,打开bin下的:jmeter.bat报错 二.解决方法:  尝试解决了jmeter.bat的内存占用还是没有解决 最终发现 ...

  4. 如何安全的大数据量表在线进行DDL操作

    本文为博主原创,转载请注明出处 随着业务的需要,工作中需要对生产数据库的一些表做一些DDL操作,由于生产数据库表的数据量都是几千万, 而且生产数据库的表还在不断的进行新增和查询操作.应用中需要对生产数 ...

  5. [java] - servlet路径跳转

    Index.jsp <a href="servlet/HelloServlet">servlet/HelloServlet</a><br> &l ...

  6. JQuery - CheckBox Prop 和 attr 的区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Laravel - 使用ajax

    一,前台模板文件  index.blade.php <!DOCTYPE html> <meta name="_token" content="{{ cs ...

  8. [转帖]nginx优化配置及方法论

    https://www.jianshu.com/p/87f8c03e91bd 1.优化方法论 从软件层面提升硬件使用效率 增大CPU的利用率 增大内存的利用率 增大磁盘IO的利用率 增大网络带宽的利用 ...

  9. [转帖]Linux的tmpfs和ramfs

    tmpfs tmpfs是一种虚拟内存文件系统, 它的存储空间在VM里面,现在大多数操作系统都采用了虚拟内存管理机制, VM(Virtual Memory) 是由Linux内核里面的VM子系统管理. V ...

  10. [转帖]Intel“革命性”X86s架构,带来哪些颠覆及影响?

    https://www.eet-china.com/mp/a221822.html 英特尔发布了一份新的白皮书(Intel X86-S扩展架构规格),计划简化其处理器指令集架构(ISA).英特尔提供了 ...