抽象类
程序员文章站
2022-04-01 10:15:25
...
抽象类概念
普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分,用abstract关键字修饰。
首先我们来创建一个抽象类
abstract class Animal1{//创建一个抽象类
abstract public void cry();//抽象方法 不做具体实现
public void fun1(){//普通方法
}
}
接下来对它进行操作
public class Test13 {
public static void main(String[] args) {
Animal1 a = new Animal1();//会报错!!!抽象类不能实例化一个对象
}
}
Animal1是抽象的,无法直接进行实例化操作。当一个类实例化之后,就意味着这个对象可以调用类中的属性或者方法,但在抽象类里存在抽象方法,而抽象方法没有方法体,没有方法体就无法进行调用。既然无法进行方法调用的话,又怎么去产生实例化对象呢。抽象方法被继承
class Dog1 extends Animal1{
@Override
public void cry() {//实现它的抽象方法
// TODO Auto-generated method stub
System.out.println("wang wang!!!1");
}
}
继承抽象类的时候必须实现它的抽象方法,但是如果此类也是抽象类的话可以不实现
abstract class Cat1 extends Animal1{
abstract public void cry();//不可以实现这个抽象方法
}
1,抽象类必须被public protected修饰,因为如果被private修饰的话,就不能被继承,如果不被继承就无法实现它的抽象方法。(缺省情况下默认为public)
2,抽象类不能直接实例化,但可以通过向上转型来进行实例化
abstract class Animal1{//创建一个抽象类
abstract public void cry();//抽象方法 不做具体实现
public void fun1(){//普通方法
}
}
class Dog1 extends Animal1{
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("wang wang!!!1");
}
}
public class Test13 {
public static void main(String[] args) {
//Animal1 a = new Animal1();//抽象类不能实例化一个对象
Animal1 a = new Dog1();//向上转型
a.cry();
}
}
3,抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类; 4,子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);
5,抽象类能否用static修饰
用static修饰会报错
class A{
abstract static class Animal1{//创建一个抽象类
abstract public void cry();//抽象方法 不做具体实现
public void fun1(){//普通方法
}
}
}
class Dog1 extends A.Animal1{
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("wang wang!!!1");
}
}
public class Test6 {
public static void main(String[] args) {
//Animal1 a = new Animal1();//抽象类不能实例化一个对象
A.Animal1 a = new Dog1();
a.cry();
}
}
但是内部抽象类可以用static修饰!!!!
(穿插一点被final修饰的类和方法的内容)
被final修饰的类不能被继承
被final修饰的方法不能被修改
final修饰的类可以防止有意的派生
上一篇: Java抽象类