---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
3.9抽象类
1、特点:⑴、方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰,抽象方法必须被定义在抽象类中,该类也得被abstract修饰。
⑵、抽象类不可以实例化,因为调用方法没有意义。
⑶、抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则该类还是抽象类。
2、问题细节:⑴、抽象类中有构造函数,用于给子类对象进行初始化
⑵、抽象类中也有非抽象方法,目的就是不让该类创建对象
3、抽象类不可以与那些关键字共存?
⑴、private:如果私有了,就不可以被子类覆盖了
⑵、static:
⑶、final:final是最终的,被他修饰的不可以覆盖。
4、抽象类与一般类的异同点:
⑴、相同:他们都是用来描述事物的,都在内部定义成员
⑵、不同:①、一般类有足够的信息描述事物,而抽象类信息不足
②、抽象类可定义抽象方法和非抽象方法,而一般类只能定义非抽象方法
③、抽象类不可以实例化,而一般类可以。
5、抽象类一定是父类,因为需要子类覆盖其所有的抽象方法后,才能对子类实例化。
abstract class Employee {
private String name;
private String id;
private double pay;
Employee(String name, String id, double pay) {
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work();
}
class Manager extends Employee{
private int bonus;
Manager(String name, String id, double pay, int bonus) {
super(name,id,pay);
this.bonus = bonus;
}
@Override
public void work() {
System.out.println("Manager work");
}
}
class Pro extends Employee{
Pro(String name, String id, double pay) {
super(name,id,pay);
}
@Override
public void work() {
System.out.println("Pro work");
}
}
public class AboutAbstract {
public static void main(String[] args) {
Manager man = new Manager("hufei", "4556", 11110, 256);
man.work();
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
详细请查看:<ahref="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>
本文出自 “狼王” 博客,请务必保留此出处http://19901111.blog.51cto.com/6838239/1220302