零基础入门学习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 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...
随机推荐
- 2、springboot创建多模块工程
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- C++大整数类
用法 把头文件和源代码文件放在同一目录下,然后#include"INT"即可使用.你能对int类的变量进行a=2,a+=3,a%8,a--等等操作,那你就也能对INT进行.INT基 ...
- apache-jmeter-5.6.3版本报错:errorlevel=1的解决办法
一.背景: 今天遇到了apache-jmeter-5.6.3版本,下载解决后,打开bin下的:jmeter.bat报错 二.解决方法: 尝试解决了jmeter.bat的内存占用还是没有解决 最终发现 ...
- 如何安全的大数据量表在线进行DDL操作
本文为博主原创,转载请注明出处 随着业务的需要,工作中需要对生产数据库的一些表做一些DDL操作,由于生产数据库表的数据量都是几千万, 而且生产数据库的表还在不断的进行新增和查询操作.应用中需要对生产数 ...
- [java] - servlet路径跳转
Index.jsp <a href="servlet/HelloServlet">servlet/HelloServlet</a><br> &l ...
- JQuery - CheckBox Prop 和 attr 的区别
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Laravel - 使用ajax
一,前台模板文件 index.blade.php <!DOCTYPE html> <meta name="_token" content="{{ cs ...
- [转帖]nginx优化配置及方法论
https://www.jianshu.com/p/87f8c03e91bd 1.优化方法论 从软件层面提升硬件使用效率 增大CPU的利用率 增大内存的利用率 增大磁盘IO的利用率 增大网络带宽的利用 ...
- [转帖]Linux的tmpfs和ramfs
tmpfs tmpfs是一种虚拟内存文件系统, 它的存储空间在VM里面,现在大多数操作系统都采用了虚拟内存管理机制, VM(Virtual Memory) 是由Linux内核里面的VM子系统管理. V ...
- [转帖]Intel“革命性”X86s架构,带来哪些颠覆及影响?
https://www.eet-china.com/mp/a221822.html 英特尔发布了一份新的白皮书(Intel X86-S扩展架构规格),计划简化其处理器指令集架构(ISA).英特尔提供了 ...