/**
* 抽象类的一个小实验.
* 实验结果: 1.抽象类中如果没有抽象方法也不能实例化.
* 2.抽象类的构造方法依然会被调用
* 3.抽象方法必须使用abstract关键字修饰
*/
public class NewClass2 {
public static void main(String[] args) {
TT tt = new TT();
tt.setName("ss1");
System.out.println(tt.getName());
TT tt2 = new TT("ss2");
System.out.println(tt2.getName());
}
}
/**
* 抽象类 T
* 1.使用abstract定义的类仅仅不能被实例化.
* 2.必须使用abstract定义方法,在本类中才能不写方法体,但本类的子类必须实现.
*/
abstract class T {
// 虚拟类的成员属性
private String name;
// 有参构造函数
public T(String name) {
this.name = name;
System.out.println("虚拟类的有参构造函数被调用");
}
// 无参构造函数
public T() {
System.out.println("虚拟类的无参构造函数被调用");
}
// 设置姓名
public void setName(String name) {
this.name = name;
}
// 获取姓名
public String getName() {
return this.name;
}
// 虚拟方法,这个方法子类必须重写.
public abstract void ta();
}
final class TT extends T{
// 无参构造函数
public TT() {}
// 有参构造函数
public TT(String name) {
super(name);
}
// 重写父类的抽象方法
public void ta() {
System.out.println("实现虚拟类的方法ta()");
}
}