2021年7月27日
讲师:王博
第一阶段第三周
Id:10.8.159.18
今日内容
·继承
·子类父类的内存分析图
·super关键字
·重写
·重载
·抽象类
1继承
Java三大特性:封装,继承,多态
1.1生活中的继承
子承父业
龙生龙,凤生凤,老鼠生来会打洞
你很像你的父亲
游戏里面 大量的继承
1.2java中继承的语法格式
java使用关键字:extends进行继承的操作
继承至少得有两个类
格式:
Class B extends A{
}
B类继承了A类,A类是B类的唯一的父类,或者叫超类,基类
Java中是单继承(一个儿子只能有一个亲生父亲)
B类是A类的子类
B类继承了A,A的东西(除了私有化的)都可以用。
讲课思路:
成员属性:
公开的成员属性
子类能继承父类公开的成员属性
私有的成员属性
子类不能继承父类私有的成员属性
成员方法
公开的成员方法
子类能继承父类公开的成员方法
私有的成员方法
子类不能继承父类私有的成员方法
构造方法:慎独
无参数的构造方法
子类继承了父类,会把子类的无参构造方法执行,并且也会执行父类的无参数构造方法,执行顺序:先执行父类的无参构造方法,在执行子类的无参构造方法
2子类父类的内存分析图
实例化子类的时候,先执行
3super关键字【鸡肋】
This调用当前对象的成员属性和成员方法
This调用构造方法
Super调用父类的成员属性和成员方法还有构造方
注:
·必须有继承关系,如果想使用super关键字
·super关键字必须写在子类里面。意思是让在子类中调用父类的一些东西
·super成员属性只能写在子类的定义方法中
·super.方法()只能写在子类定义的方法中
Super调用构造方法
This:调用当前类的成员属性和成员方法
Super:调用父类的成员属性和成员方法
格式:
Super();
注:
·一定要在子类的构造方法中调用父类的构造方法
·必须写在第一行
讲课思路
成员属性:
Super.blood=2000;只能写在子类定义的方法中
成员方法:
Super.haPi();只能在子类的方法中调用父类的东西
构造方法:
在子类的构造方法中调用父类的构造方法
4重写【override】
子类通过继承可以使用父类的非私有化的成员方法,但是有的时候父类的方法需求不满足子类的需求,在不改变父类的方法需求下,可以对父类的方法进行重写
重写的条件:
·必须有继承关系
·父类的方法必须是公开的
·子类的方法必须和父类的方法一样(方法名,返回值,参数)
·必须在子类中重写
5重载【overload】
重载的条件
1必须在同一个类中
2方法名必须一样,返回值必须一样,但是参数一定不一样
package com.liujinghe.class5;
class Person{
//成员方法
//run的这三个方法就是重载
//方法名一样,返回值一样,参数不同
public void run(){
System.out.println("在跑步");
}
public void run(String name){
System.out.println(name+"在跑步");
}
public void run(String name,int age){
System.out.println(name+";"+age+";"+"在跑步");
}
}
public class Demo1 {
public static void main(String[] args) {
Person person = new Person();
person.run();
person.run("老星");
person.run("张",45);
}
}
6instanceof关键字(判断对象是否是这个类或者子类的对象)
是java中二元运算符,左边是对象,右边是类,返回值是布尔类型,当左边的对象是右边的类或者子类所创建的对象的时候,返回true,否则返回false
语法格式
Person instanceof Object
package com.liujinghe.class6;
public class Demo {
public static void main(String[] args) {
/**
* 是java中二元运算符,
* 左边是对象,右边是类,返回值是布尔类型,
* 当左边的对象是右边的类或者子类所创建的对象的时候,
* 返回true,否则返回false
*/
B b = new B();
A a = new A();
C c = new C();
boolean result2 = c instanceof B;
boolean result1=a instanceof A;
boolean result = b instanceof A;
System.out.println(result);
System.out.println(result1);
System.out.println(result2);
}
}
7
需求:
宠物饿了,需要铲屎官给宠物喂食
- 不同的宠物吃的食物不一样
- 不同的宠物恢复后体力值不一样
- 铲屎官和狗玩接飞盘游戏,体力值下降10,但是会与铲屎官 的亲密度加5
- 铲屎官和猫玩滚毛球,体力值减少12,但是会与铲屎官的亲密度加7
8抽象类【abstract修饰的类】
8.1abstract关键字
·abstrace修饰成员方法叫抽象方法
·abstrace修饰类叫抽象类
注意事项
·abstrace修饰成员方法,但是这个方法没有方法体
·abstrace修饰的成员方法所在的类也必须加上abstrace修饰
·abstrace修饰的成员方法,没有方法体,没有实现的代码
·抽象类下面可以有非抽象方法
·抽象类下面可以没有抽象方法,但是叫抽象类
·抽象类不可以实例化
·抽象类能被继承,但是必须重写抽象方法
·一个类只能继承一个抽象类
有抽象方法的类一定是抽象类
抽象类不一定有抽象方法
作业
父类:葫芦
子类:七个子类
作业
1instanceof 关键字 百度扩展
2代码三次(必须的)
3作业