多态、抽象类、接口

多态、抽象类、接口

多态

在这里插入图片描述

多态代码演示

父类
public class Fu {
    int i=199;
    public Fu() {
        System.out.println("我是父类构造方法");
    }
    public void show(){
        System.out.println("我是父类show方法");
    }
}

子类

public class Zi extends Fu{
    int i=100;
    public Zi() {
        //super();默认就有的父类引用,因此会先初始化父类构造函数
        System.out.println("我是子类构造函数");
    }
    @Override
    public void show() {
        System.out.println("我是子类重写的show方法");
    }
    public void show1(){
        System.out.println("我是子类特有的show1方法");
    }
}

测试类

public class Text {
    public static void main(String[] args) {
        Fu f=new Zi();
        System.out.println(f.i);//因为在多态时先指向的是父类,因此结果是199,请看下面示意图
        f.show();
        //如果不加这一句直接写f.show1(); 这段代码会报错,因此要想调用子类特有成员,就要强制转化成子类
        Zi z=(Zi)f;
        z.show1();
    }
}

结果

我是父类构造方法
我是子类构造函数
199
我是子类重写的show方法
我是子类特有的show1方法

以上示意图

在这里插入图片描述

抽象类

  抽象类好比就是动物这个概念,动物里有各种各样的生物,比如说猫和狗,它们都有共同的动作(如:吃饭、睡觉),但是这些动作表达的方式却又不同,因此我们运用到了抽象这个概念,把共同的动作写在抽象类中,通过不同个体(类)对它进行表达(重写)。

在这里插入图片描述

抽象类代码演示

抽象类
public abstract class Abstract {
    int i=100;//变量
    final double f=19.3;//常量
    public abstract void show();//抽象方法
    public abstract void show1();//抽象方法
    //具体方法
    public void show3(){
        System.out.println("我是抽象类的具体方法");
    }
}

子类

public class AbstractZi extends Abstract{
//方法重写
    @Override
    public void show() {
        System.out.println("我是子类的重写的show方法");
    }
    @Override
    public void show1() {
        System.out.println("我是子类重写的show1方法");
    }
}

测试类

public class AbstractText {
    public static void main(String[] args) {
        AbstractZi z = new AbstractZi();//new对象
        z.show();
        z.show1();
        z.show3();
        System.out.println(z.i+"\t"+z.f);
    }
}

结果

我是子类的重写的show方法
我是子类重写的show1方法
我是抽象类的具体方法
100	19.3

接口

  接口就是我们用来扩展某项功能的,比如马戏团的猫和普通猫不同,马戏团里的猫会跳火圈、计算等,这只是猫中的一部分会,这个额外的动作就需要我们用接口来定义。

在这里插入图片描述

接口代码演示

接口
interface Base {
    public static final int k = 0;//只能是公共静态常量
    public abstract void show();//方法声明(public abstract可以不写,系统会自动隐式加上)
    public abstract void show1();
}

实现类

class Demo implements Base {
	@Override
	public void show() {
		System.out.println("我重写了show方法");
	}
	@Override
	public void show1() {
		System.out.println("我重写了show1方法");
	}
}

测试类

public class Text {
    public static void main(String[] args) {
        Demo d = new Demo();
        d.show();
        d.show1();
        System.out.println(d.k);
    }
}

结果

我重写了show方法
我重写了show1方法
0

猜你喜欢

转载自blog.csdn.net/grey_mouse/article/details/83351348