Java学习笔记10(零压力理解继承多态权限修饰符)

继承

继承是Java最重要的,类之间有内在联系,子类和父类。子类比父类更 具体,表示更少的对象。子类是扩展,extends ,这个单词翻译过来也是扩展。

假如有汽车类,又有自动驾驶车类,你只要在继承汽车类加上自动驾驶方法就行了。

代码不用重复写。还是人类 Person为例,这个类里面有属性和方法。

public class Person {
	/**
	 * 父类,有些共性代码
	 */
	int age;
	String name;
	int sex;
	
	public void showInfo() {
		System.out.println(this.name);
		System.out.println(this.age);
		System.out.println(this.sex);
	}
}

格式:
继承的关键字extends
类修饰名 class 子类名 extends 父类名

你看这里学生类就继承了人类的属性,name ,age ,sex.
还继承了方法。 showInfo(){}
复习一下this关键字
在这里插入图片描述

子类写特有的代码就行!
以学生类为例:

public class Student extends Person {
	String school;//不用再去定义age,name,sex
	
	public void showInfo() {
		System.out.println(this.school);
		System.out.println(this.name);
		System.out.println(this.age);
		System.out.println(this.sex);
	}

}

注意:

  1. 继承提高了代码的效率
  2. 不要为了继承而继承(比如狗类继承人类,no!)
  3. 继承是多态的前提(后面讲)

笔记:继承,子类不是父类的子集,是扩展(extends)!(比如你比你爸更优秀)
子类不能访问父类private变量,无这个权限(比如你不能继承你爸的银行卡密码)

一个子类只能有一个父类(你只能有一个爸爸,但是你爸爸可以有多个儿子)

Java不支持多重继承,但是可以用接口来解决这个问题
Java接口

方法的重写(override)

改的只是方法体的代码就是{}里面的东西
在子类里面按住键盘的ALT+/, 如下
在这里插入图片描述
这就是方法的重写!

在这里插入图片描述
在这里插入图片描述

笔记:
方法的重载:一个类有哦多个同名的方法
方法的重写:子类可以重写写父类的方法,覆盖父类的方法;

子类调用父类的方法

public class Student extends Person {
	String school;//不用再去定义age,name,sex
	
//	public void showInfo() {
		System.out.println(this.school);
		System.out.println(this.name);
		System.out.println(this.age);
		System.out.println(this.sex);
//	
//	}
	
	
	public static void main(String[] args) {
		Student stu = new Student();
		stu.showInfo();//子类调用父类的方法
	}

}

在这里插入图片描述
把重写的部分注释掉,这个就变成了了子类对父类方法的继承。

四种访问权限修饰符:

笔记:
如果子类和父类在同一个包下:除了private不能访问,其他三种都可以访问,继承使用。
如果子类和父类不在同一个包下:除了private,default不能访问,只有protected public才可以访问,继承使用。

关键字super

为什么有这个关键字呢,因为继承可以是多层的,比如说你和你爸爸,你爸爸和你爷爷。为了区分你继承你爸爸还是你继承你爷爷的东西,用super指明。
笔记:
用super可以追溯父类(或父类的父类)的成员变量;
用super可以追溯父类(或父类的父类)的成员方法;
super可以自动继承父类的无参构造;
父类只有有参构造的时候,那么子类必须构建有参来调用父类的有参构早,调用父类构造方法得写在第一行。

this和super 的区别:在这里插入图片描述

类对象的实例化的底层原理

图片多看几遍!!!
在这里插入图片描述
在这里插入图片描述

多态

重载:相同的方法,不同的逻辑
重写:子类对父类方法的覆盖,同方法名,覆盖逻辑。
对象的多态;

Person e = new Student();
		e.showInfo();

这个e.showInfo是属于Student类的方法
笔记:
栈中,e
堆,new Student(),引用栈中的e
方法在栈中运行,会动态的进站出站。
调用时进栈,用完出栈。

instanceof操作符

判断是否属于对象

案例

Person e = new Student();
		System.out.println(e instanceof Student);
		

返回的是true

object类

object类是最高层的父类(你爸爸的爸爸的祖宗)

笔记:
object类是基(根)类,默认的继承类

子曰:学而时习之!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值