多态、抽象类、接口
多态、抽象类、接口
多态
多态代码演示
父类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