抽象类的要点与注意事项(有错误还望指正,初学笔记总结):

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 返回值类型  方法名();包含抽象方法的类必须被限定为抽象类。如果子类是非类,就必须实现父类中的所有抽象方法。

局限性(只相对而言,任何一个机制都有其特定性,适合解决某一类特定问题,无所谓优与劣,存在即合理):接口是否优于抽象类?