抽象类的要点与注意事项(有错误还望指正,初学笔记总结):
1.抽象类(型)无法实例化某个具体的对象,即不能new 类型名()。但是可以声明对抽象类(型)的引用。即:抽象类(型)名 变量名;
people people;
.............
abstract class people{
..........
}
2.可以把抽象类型的父类(声明类)的引用(地址,变量名)指向子类对象,以实现动态方法绑定。而一旦实现动态方法绑定,当引用调用相应的方法实现不同子类的处理过程,其引用的对象就是被指向的子类对象的相应方法,覆盖(抽象引用类)父类的同名方法,但必须保证引用子对象的方法在父子类中共存。。
public static void main(String[] args)
{people people;
Boss boss=new Boss();
people=boss;//................
此时boss.tostring等价于people.tostring;
}
3.抽象类型必须被继承,类中的抽象方法也必须被重写.,子类必须覆盖父类同样的方法。而抽象方法,其主要目的就是为所有的子类定义一个统一的接口,至于方法体的实现,由不同的子类在各自的类定义中实现其算法。并且引用在多态的动态实现时父类的引用指向了相应的子类对象。
class Boss extends people
{
public string sex()
{return ......;}
........
}
abstract class people{
public abstract string sex();
..........
}
4.抽象类中也可以有具体的数据和方法。如果要在子类中调用父类的同名方法用super.方法名();如果是属性,想返回(调用)父类属性,则调用父类的构造函数,即super(属性变量参数名列表);
总结:抽象类就是没有具体对象的概念类,是其所有子类的公共属性集合,可以充分利用这些公共属性来提高开发和维护程序的效率。。
升华部分:
1.抽象基类的目的只是为了他的所有导出类(子类/派生类)创建一个通用接口,没有具体的实现内容,所以创建基类对象是没有任何意义得,不同的子类可以以不同的方式来诠释此接口,创建一个抽象类,通过此公共接口来操纵一系列类,所有与父类同名(声明的特征签名相符)的子类方法,都会通过动态绑定机制来调用。
2.抽象方法(相当于C++中的纯虚函数)是残缺得,没有方法体,仅有声明abstract 返回值类型 方法名();包含抽象方法的类必须被限定为抽象类。如果子类是非类,就必须实现父类中的所有抽象方法。
局限性(只相对而言,任何一个机制都有其特定性,适合解决某一类特定问题,无所谓优与劣,存在即合理):接口是否优于抽象类?