[Java手记]继承
什么是继承
继承类似Adobe After Effects“父级”关系,是上下级关系,父级是顶层类似根目录,子类承上启下。
多个子类可以继承同一个父类,但只能继承一个父类,像金字塔关系。
继承书写格式
关键字:extends
在子类名称的后面写extends在加上父类名称
//子类
public class F22 extends Air{//声明继承Air为父类
}
//父类
public class Air {
String sort;
String use;
public void run() {
//方法体
}
}
//main类
public class main {
public static void main(String[] args) {
F22 f22 = new F22();//实例化子类
f22.sort = "喷气式";//可以写入父类数据
f22.run();//可以调用父类方法
System.out.println(f22.sort);//可以读取父类数据
}
}
继承方法重写
当父类里的数据类型或方法与子类重名或相同,以子类的数据或方法为准。
继承里的一些关键字和类的应用
1、super关键字
父类里有有参方法时,无法通过子类向上传入数据,需要通过super关键字上传,
super需要写在子类构造方法里的第一行
//Air父类
public class Air {
public Air(String sort, String use) {
super();
System.out.println("访问到了");
}
}
//F22子类
public class F22 extends Air{
public F22(String sort, String use) {
super(sort, use);//super修饰
}
}
//main类
public class main {
public static void main(String[] args) {
Air f22 = new Air(null, null);
}
}
2、final关键字
父类中的 final 不能被继承,不能被子类重写,不能改变值。
声明 final 方法的主要目的是防止该方法的内容被修改。
final dounle a = 3.14;//只能调用,不能重新和更改
3、Object类
Object类中的.equals方法和"=="意义相同
String字符串也是一个类,也有.equals方法,但是字符串类对.equals方法实现了重写
//F22类
public class F22{
String nick;
int age;
String color;
public F22(String nick, int age, String color) {
this.nick = nick;
this.age = age;
this.color = color;
}
public boolean equals(F22 d) {//重写.equals方法
if(this.nick.equals(d.nick) && this.color.equals(d.color) && age == d.age) {
//在重写的Obj.equals方法进行String的.equals方法比较
//this.nick.equals(d.nick)含义是对象d1的nick String值与d2的nick String值比较
return true;
}else {
return false;
}
}
}
//main方法
public class main {
public static void main(String[] args) {
F22 d1=new F22("小黑",2,"黑色");
F22 d2=new F22("小黑",2,"黑色");
System.out.println(d1.equals(d2));//将d1对象和d2对象传入重写的.equals方法
}
}
4、抽象类 abstract
抽象类只能被继承,不能被实例化,不能创建对象
抽象类里可以有普通方法,也可以有抽象方法
//F22子类
public class F22 extends Air{
public F22(String nick, int age, String color) {
this.nick = nick;
this.age = age;
this.color = color;
}
@Override
public void Air() {
//必须在子类实现方法
}
}
//Air父类
public abstract class Air {
//抽象类。抽象方法没有方法体
public abstract void Air();
}
抽象类和抽象方法目的
使得父类更加简洁纯粹,只做规范不做涉及具体内容
方便统一管理,协同开发
抽象类专门为继承而生
接口 interface
属性是全局静态常量
方法必须是public抽象方法
没有构造方法
无法实例化
//Missile接口类
public interface Missile {
public abstract void fire();//public抽象方法
}
//F22子类
//多接口接入,用","隔开,如:implements Missile,...,...
public class F22 extends Air implements Missile{
@Override
public void qifei() {//重写抽象父类方法
System.out.println("起飞");
}
@Override
public void fire() {//重写接口方法
System.out.println("发射制导导弹");
}
}
//Air父类
public abstract class Air {//抽象父类
public abstract void qifei();//抽象方法
}
//main方法
public class main {
public static void main(String[] args) {
F22 f22 =new F22();
f22.qifei();
f22.fire();
}
}
多态向上转型和向下转型
多态,简而言之就是同一个行为具有多个不同表现形式或形态的能力。比如说,有一杯水,我不知道它是温的、冰的还是烫的,但是我一摸我就知道了。我摸水杯这个动作,对于不同温度的水,就会得到不同的结果。这就是多态。
向上转型
向上转型是将子类对象转为父类对象使用;实例对象向上传
//F22子类
public class F22 extends Air{
public void fire() {//2、通过子类重写发射的导弹种类
System.out.println("发射空空导弹");
}
}
//J20子类
public class J20 extends Air{
public void fire() {//2、通过子类重写发射的导弹种类
System.out.println("发射空地导弹");
}
}
//Z10类
public class Z10{
public void fire(Air fire) {
System.out.println("开始预警");
}
}
//Air父类
public abstract class Air {
public abstract void fire();//1、发射方法可能多态
}
//main方法
public class main {
public static void main(String[] args) {
Z10 z10 = new Z10();
F22 f22 = new F22();
J20 j20 = new J20();
z10.fire(f22);
z10.fire(j20);
}
}
instanceof和向下转型
向下转型是将父类对象转为子类对象使用;
instanceof判断一个对象是否为一个类的实例
实例对象向下传
//F22子类
public class F22 extends Air{
public void fire() {
System.out.println("发射空空导弹");
}
public void load() {
System.out.println("开始装弹");
}
}
//J20子类
public class J20 extends Air{
public void fire() {
System.out.println("发射空地导弹");
}
}
//Z10类
public class Z10{
public void fire(Air fire) {
System.out.println("开始预警");
if(fire instanceof F22) {//判断传入对象是否正确
System.out.println("传进来的是F22");
((F22) fire).load();//拿到对象特有方法
F22 f22 = (F22)fire;//((F22) fire).load();方法实现过程1
f22.load();//((F22) fire).load();方法实现过程2
}else {
System.out.println("传进来的不是F22");
}
}
}
//Air父类
public abstract class Air {
public abstract void fire();
}
//main方法
public class main {
public static void main(String[] args) {
Z10 z10 = new Z10();
F22 f22 = new F22();
J20 j20 = new J20();
z10.fire(f22);//1、向下传入实例对象
}
}
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
屠龙少年!
喜欢就支持一下吧