zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    wcf连接数据库用sqlhelper,连接数一直没有释放反而增加
    Assembly.GetManifestResourceStream为null
    webapi <Message>已拒绝为此请求授权。</Message>
    未找到与名为“xxx”的控制器匹配的类型。
    Eclipse Ctrl+鼠标左键不能查看源代码
    WEB API 用MemoryStream流做下载功能
    mysql繁字体报错,Incorrect string value: 'xE9_' for column 'UserName' at row 1
    学信网模拟登录2
    选择排序
    mysql学习笔记
  • 原文地址:https://www.cnblogs.com/dshore123/p/8867093.html
Copyright © 2011-2022 走看看