黑马程序员————java中的抽象类
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
抽象类集中的体现了java面向对象的特性,对于每一种事物通过五个方面:属性,方法,构造器,代码块,内部类,来重新解构再进行组装,然后将类似的事物归为一类,这是面向对象的思想。java中常说万物皆对象,那么很显然我们可以进一步的将其中的方法拿出来作为对象研究,也就是进一步抽取其功能,生成鼻祖,通过子类继承父来调用类似功能。由于经abstract修饰的类是无法创建对象的,经abstract修饰的方法也是没有任何意义的,所以,子类必须要重写父类的抽象方法。
abstract class Animal{ abstract void sing(); abstract void show(); } class Cat extends Animal{ void sing(){ System.out.println("喵喵唱歌"); } void show(){ } } class Dog extends Animal{ void sing(){ System.out.println("汪汪唱歌"); } void show(){ } } public class A6_58{ public static void main(String[] args){ Animal t=new Cat(); t.sing(); } }
对于abstract,当修饰类时,此类为抽象类,类中成员方法分三种情况:1.可以全为抽象方法,此类无法创建对象,子类需要复写父类中所有的抽象方法才能通过创建子类对象调用其方法
abstract class cx{ abstract void function1(){//抽象方法1 System.out.println(“我是抽象方法1”); } abstract void function2(){//抽象方法2 System.out.println("我是抽象方法2"); } }
class zi extends cx{
void function1(){
System.out.println("复写后的抽象方法1");
}
void function2(){
System.out.println("复写后的抽象方法2");
}
}
class A{
public static void main(String[] args){
zi aa =new zi;
aa.function1;//将调用复写后的方法
aa.function2;//将调用复习后的方法
}
}
2.可以全为非抽象方法,此类依然无法创建对象,这种情况极少见,一般是为了不想此类创建对象才用abstract修饰
abstract class cx{ void aa(){ System.out.println("我是普通方法"); } void bb(){ System.out.println("我也是普通方法"); } }
3.可以有抽象方法也可以有非抽象方法,无法创建对象,子类依然需要复习掉所有的抽象才能创建对象。当修饰方法是,只要该类中有抽象方法,那么该类必须定义为抽象的,正因如此,子类继承父类时如果想要创建对象必须要复写掉其中所有的抽象方法。
abstract class cx{ void aa(){ System.out.println("我是普通方法"); } abstract void bb1(){ System.out.println("我是抽象方法1"); } abstract void bb2(){ System.out.println("我是抽象方法2"); } } class zi{ void bb1(){ System.out.println("复写抽象方法1"); } }
上述这种情况就是并没有将抽象类中所有的抽象方法复写玩,那么他还是一个抽象,无法创建对象,也就无法调用方法。