java基础12 抽象类(及关键字:abstract)

抽象类:abstract

1、应用的场景

    我们描述一类事物时,存在着某种行为,但这种行为目前不具体,那么我们就可以抽取这种行为的声明,但是不去实现这种行为,我们就需要使用抽象类.

2、抽象的好处

    强制要求非抽象的子类一定实现父类抽象的方法

3、抽象类需要注意的细节

    1.如果一个函数没有方法体,那么该函数必须要使用抽象来修饰,把该函数修饰成抽象函数
    2.如果一个类中出现抽象函数,那么该类必须使用abstract修饰
    3.如果一个非抽象类继承了抽象类,那么必须实现抽象类的所有抽象函数.
    4.抽象类可以不存在抽象方法(无意义)
            因为抽象类的作用:强制要求非抽象的子类一定实现父类抽象的方法,如果不要抽象方法,name就没意义了
    5.抽象类不能实例化
           为什么抽象类不能实例化呢?
               因为抽象类存在抽象的方法,如果能让抽象类实例化,那么使用抽象的对象就能调用抽象的方法,就毫无意义了;
    6.抽象类是存在着构造函数,其构造函数是提供子类创建对象时初始化父类的的属性;

4、abstract不能与以下几个关键字修饰用一个方法

1.abstract不能与与private修饰同一个方法;
2.abstract不能与static修饰同一个方法;
3.abstract不能与final修饰同一个方法

5、附:常量的命名规范

    全部字母都要大写,单词与单词之间 使用下划线分割;

6、抽象类实例

 1 /*
 2 需求:描述一个图形,圆形,矩形三个类.不管那种图形都具备计算面积和周长的行为,
 3 但是每种图形的计算方式不一样;
 4 */
 5 abstract class MyShape{ //抽象类
 6     final static double PI=3.14;
 7     String name;
 8     public MyShape(String name){
 9         this.name=name;
10     }
11     public abstract void getArea(); //抽象方法
12     public abstract void getLength(); //抽象方法
13 }
14 
15 class Circle extends MyShape{
16     int r;
17     public Circle(String name,int r){
18         super(name); //super或者this调用构造时,必须位于第一句.所以super和this不能同在一个构造器中.
19         this.r=r; //这里不需要,因为这里调用的是属性.
20     }
21     public void getArea(){
22         System.out.println("这是圆形的面积"+(r*r*pi));
23     }
24     public void getLength(){
25         System.out.println("这是圆形的周长"+(2*pi*r));
26     }
27 }
28 
29 class Rectangles extends MyShape{
30     int width;
31     int length;
32     public Rectangles(String name,int width,int length){
33         super(name);
34         this.width=width;
35         this.length=length;
36     }
37     public void getArea(){
38         System.out.println("这是矩形的面积"+(width*length));
39     }
40     public void getLength(){
41         System.out.println("这是矩形的周长"+2*(width+length));
42     }
43 }
44 class  Demo3{
45     public static void main(String[] args){
46         Circle c=new Circle("圆形",5);
47         c.getLength();
48         c.getArea();
49         /*
50         Rectangles r=new Rectangles("矩形",12,4);
51         r.getLength();
52         r.getLength();  */
53         
54     }
55 }

 

 

 

 

 

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:http://www.cnblogs.com/dshore123/p/8867093.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

 

posted @ 2018-04-17 15:41  DSHORE  阅读(1876)  评论(0编辑  收藏  举报