Java中abstract的基本使用与详解

Java中abstract的基本使用与详解先来看一道题:下列哪一种叙述是正确的A:abstract修饰符可修饰字段、方法和类B:抽象方法的body部分必须用一对大括号{}包住C:声明抽象方法,大括号可有可无D:声明抽象方法不可写出大括号解析:Djava中规定:abstract只能修饰类和方法,不能修饰变量。1、什么是抽象类?类和类之间如果具有相同的特征,将这些共同的特征提取出来,形成的就是抽象类。类本身是不存在的,所以抽象类无法实例化对象。类到对象是实例化,对象到类是抽象。publicclassTest{p

Java中abstract的基本使用与详解"

先来看一道题:

下列哪一种叙述是正确的

A:abstract修饰符可修饰字段、方法和类

B:抽象方法的body部分必须用一对大括号{ }包住

C:声明抽象方法,大括号可有可无

D:声明抽象方法不可写出大括号

解析:D

java中规定:abstract只能修饰类和方法,不能修饰变量。

1、什么是抽象类?

类和类之间如果具有相同的特征,将这些共同的特征提取出来,形成的就是抽象类。

类本身是不存在的,所以抽象类无法实例化对象。
类到对象是实例化,对象到类是抽象。

public class Test { 
   
    public static void main(String[] args) { 
   
        Animal a1 = new Animal();  //此行报错
    }
}
//抽象类Animal
abstract class Animal { 
   
}

编译结果:Animal是抽象的; 无法实例化。

2、抽象类属于什么类型?
抽象类也是类,属于引用数据类型。

3、抽象类怎么定义?
语法:[修饰符列表] abstract class 类名 { }

4、抽象类是无法实例化的,无法创建对象的,所以设计抽象类就是用来被子类继承的。

5、abstractb不能和final、private、static联合使用,只能单独使用abstract或者联合public abstract使用。

6、抽象类就是用来被继承的,子类可以是抽象类,也可以是非抽象类。
非抽象子类继承了抽象父类,必须重写父类的抽象方法,可以有自己的方法,但不能是抽象方法;
抽象子类继承了抽象父类,不需要重写父类的抽象方法,可以有自己的方法,但必须是抽象方法

//抽象类Animal,父类
abstract class Animal { 
   
   
}
//抽象类Bird,子类
abstract class Bird extends Animal { 
   

}
//非抽象类:Cat,子类
class Cat extends Animal { 
   
    
}

编译结果:编译成功。
7、抽象类虽然无法被实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。

子类怎么调用父类的构造方法?
子类的构造方法第一行使用super(形参列表)方法调用父类的构造方法。

//抽象类Animal,父类
abstract class Animal { 
   
    public Animal() { 
   

    }
}
//抽象类Bird,子类
abstract class Bird extends Animal { 
   
    public Bird() { 
   
        super();
    }
}
//非抽象类:Cat,子类
class Cat extends Animal { 
   
    public Cat() { 
   
        super();
    }


编译结果:编译成功。

8、抽象类关联到一个概念:抽象方法。那什么是抽象方法?
抽象方法表示没有实现的方法,没有方法体的方法。例如:

public abstract void doSome();  //注意:没有“{ }”。

抽象方法特点是:前面使用abstract修饰,没有方法体,以分号结尾。

9、抽象类中可以有抽象方法,可以有实例方法,也可以没有抽象方法,但抽象方法一定得出现在抽象类中,或者这样说吧,抽象方法只能出现在抽象的容器中,也就是说一个类不是抽象类,那它不能有抽象方法。

//抽象类Animal
abstract class Animal { 
   
    public abstract void doSome();  //抽象类中的抽象方法,没有方法体

    public void doOther() { 
     //抽象类中的实例方法

    }

    public Animal() { 
   

    }
}

class User { 
   
    public abstract void doSome();  //编译报错:User不是抽象的, 并且未覆盖User中的抽象方法doSome()
}

10、非抽象类继承抽象类,子类一定,必须得覆盖父类中的抽象方法。为什么?

因为抽象方法只能出现在抽象类当中。子类继承了父类,也就继承了父类的抽象方法,相当于子类自己有了抽象方法,而子类自己本身不是抽象类,就必须自己覆盖掉那个抽象方法。

总结:

1、抽象类怎么定义?
在class前面添加abstract关键字就行了。

2、抽象类无法实例化对象,所以抽象类是用来被子类继承的。

3、abstract不能和final、private、static联合使用,只能单独使用,或者联合public abstract使用。一般就是public abstract联合使用。

4、抽象类的子类可以是抽象类,也可以是非抽象类。

5、抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。

6、抽象类中可以有实例方法,不一定有抽象方法,但是抽象方法一定得出现在抽象类中。

7、抽象方法的特征:
public abstract void doSome();

abstract修饰的方法没有方法体,以分号结尾。

//附提一下:native修饰的方法也没有方法体。
//例如:Object里面的public native int hashCode();

面试题:没有方法体的方法都是抽象方法吗?(错的)

8、规定abstract只能修饰类和方法,不能修饰变量。

9、非抽象类继承抽象类,一定必须得将父类中的抽象方法进行覆盖重写(最重要的一条结论)。

万变不离其宗:
抽象类:此类不能实例化,要求子类去继承。
抽象方法:只能存在抽象容器中,要求子类去覆盖重写。
抽象变量:不存在这种定义。

今天的文章Java中abstract的基本使用与详解分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33496.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注