目录
JAVA入门级教学之(abstract抽象类)
1.如何定义抽象类?
2.抽象类无法被实例化
3.虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的
4.抽象类中可以定义抽象方法
5.如果一个类本身不是抽象的,那这个类就不可以拥有抽象方法,如果写了,编译不会通过
6.一个非抽象的类继承抽象类,必须将抽象类中的抽象方法覆盖,实现,重写
7.抽象类本来就是要被继承去使用的,不继承的话没作用
JAVA入门级教学之(abstract抽象类)
1.如何定义抽象类?
class关键字前面加abstract
2.抽象类无法被实例化
3.虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的
4.抽象类中可以定义抽象方法
抽象方法的语法:
在方法的修饰符列表中添加abstract关键字,并且抽象方法应该以";"分号结束,不能带有"{}"大括号
例如:public abstract void m();
5.如果一个类本身不是抽象的,那这个类就不可以拥有抽象方法,如果写了,编译不会通过
反之,抽象类中可以出现抽象方法,也可以不出现抽象方法
注意:抽象方法必须出现在抽象类中
6.一个非抽象的类继承抽象类,必须将抽象类中的抽象方法覆盖,实现,重写
抽象类的子类可以是抽象类,也可以是非抽象类
7.抽象类本来就是要被继承去使用的,不继承的话没作用
因此,抽象类本来就是当爹的,final和abstract不能联合使用,这两个关键字是对立的
写代码的时候:能用多态就用多态
判断:
java语言中凡是没有方法体的方法都是抽象方法
结论:
不对
原因:
从Object类的源码中观察到,Object类的很多方法都没有方法体,都是以 ;结尾的,但是他们都不是抽象方法
例如:
public native int hashCode();
这个方法的底层是调用了C++写的动态链接库程序
前面的修饰符列表中没有:abstract 有一个 native ,这个native 表示的就是调用JVM本地程序
public abstract class A {//构造方法A(){System.out.println("a..");}public abstract void m1();//不可以加{},因为抽象方法不能有主体//程序入口public static void main(String[] args) {// TODO Auto-generated method stub//抽象类无法创建对象//A a=new A();}}
class B extends A{//这里是覆盖父类中的m1()方法public void m1(){}B(){super();//父类的构造方法虽然调用了,但是并没有创建父类对象System.out.println();}
}