前言:
判断一门语言是不是面向对象编程语言的标准:是否满足封装,继承,多态
Java是单继承,C++是多继承(缺点:类的体系结构混乱,菱形继承问题等)
父类有:直接父类和间接父类;同理有直接子类与间接子类
可以理解为 爷爷,儿子,孙子
何时继承:
当两个类中有多个相同的属性或方法时,抽取父类,把相同的属性和方法放入父类中
减少代码冗余,实现代码复用
子类可以重写父类的方法
注解:
@Override 重写父类的方法
@Deprecated 不推荐使用的方法
@SuppressWarnings 忽略警告
创建子类对象一定会调用父类的构造函数
创建子类对象默认调用父类的无参构造函数
子类只能调用父类存在的构造函数
子类中使用super关键字显示自定义调用父类某个构造函数
代码自行体会
package com.meilingluo.inherit;
public class DuJiaoshou extends XM{
@Override
void a(){
System.out.println("独角兽冲冲冲");
}
void b(){
System.out.println("我是独角兽");
}
}
package com.meilingluo.inherit;
public class FeiMa extends XM{
String wing;
void fly(){
System.out.println("使用"+wing+"翅膀");
}
@Override//注解,重写方法,可加可不加
void a(){
//重写父类方法,相同的方法声明,不同的方法实现
//方法声明 = 返回值类型 + 方法名 + 参数列表
System.out.println("勇敢柔柔,不怕困难");
}
void c(){
super.a();//父类
this.a();//子类
}
}
package com.meilingluo.inherit;
public class Skill {
void gongji(XM xm){
xm.attack();
}
}
package com.meilingluo.inherit;
public class Test {
public static void main(String[] args) {
FeiMa rourou = new FeiMa();
rourou.name = "柔柔";
rourou.a();
rourou.wing = "圣光之翼";
rourou.fly();
//声明父类,创建子类
XM ziyue;
ziyue = new DuJiaoshou();
ziyue.a();
//ziyue.b;//声明的什么类型,只能调用声明类的方法
XM yunbao = new FeiMa();
Skill skill = new Skill();
skill.gongji(ziyue);
FeiMa feiMa = new FeiMa();
feiMa.c();
}
}
package com.meilingluo.inherit;
public class XM {
String name;
void a(){
System.out.println("友谊是最强大的魔法");
}
void attack(){
System.out.println("普通攻击");
}
}
模块结构: