以下是抽象类:
/**
*
* 抽象类一般声明这个类所拥有的基本特征(属性)和行为(方法)
*
* 里面可以有非抽象的方法
*
*
*/
public abstract class AbstractCar {
/**
*
* 抽象类中可以有抽象方法,也可以有其他方法
*/
public int wheel = 2;// 轮子
// 抽象方法不需要{},由子类中具体实现
public abstract void move(); // 移动方法
// 不是抽象方法就需要{}
public void engine() {
System.out.println("抽象类中引擎类型方法:");
};
}
以下是抽象类的两个子类:
public class Car extends AbstractCar {
/**
*
* 如果子类中没有定义与父类相同的属性,this.xx调用的父类中的属性 此时 给this.xx或super.xx的属性赋值都是给父类属性重新赋值
*
*
*/
private int wheel;
/**
*
*
*
* move方法是父类抽象方法的具体实现
*/
@Override
public void move() {
this.wheel = 4;// 本类如果没声明wheel属性就会重新给父类wheel赋值
System.out.println(this.wheel);
System.out.println("父类默认属性:" + super.wheel + "只轮子");
// TODO Auto-generated method stub
System.out.println("我是汽车,要跑了!");
super.engine();
this.engine();
}
public void engine() {
System.out.println("子类汽车引擎~~~~~");
}
}
public class Bike extends AbstractCar {
private int wheel;
@Override
public void move() {
this.wheel = 2;
System.out.println("自行车轮子:" + this.wheel);
super.engine();
this.engine();
// TODO Auto-generated method stub
}
public void engine() {
System.out.println("单车引擎,哈哈!");
}
}
以下是接口
public interface IDoor {
public void alarm();
}
TestA类
public class TestA {
public void close() {
// TODO Auto-generated method stub
System.out.println("关门。。。。。");
}
public void open() {
// TODO Auto-generated method stub
System.out.println("开门。。。。");
}
}
TestB类
public class TestB extends TestA implements IDoor {
public void open() {
System.out.println("子类开门.....");
}
public void close() {
System.out.println("子类关门.....");
}
public void alarm() {
super.open();
this.open();
super.close();
this.close();
System.out.println("接口警报。。。。。");
}
}