• 抽象类,接口


    抽象方法的概念:

    当多个具体的实类存在着共同的行为,但是有不同的表现(学生和老师都睡觉,老师睡职工宿舍,学生睡在学生宿舍),在子类继承过程中父类方法的具体实现不能确定,但是能确定的是他们都有这种行为,我们把这种行为方法称为抽象方法。

    抽象方法的语法:

          public     abstract    [返回值]      [void]      方法名(参数列表);没有方法体。

    如果一个类中存在这么一个方法,那么这个类一定是抽象类。这个类上也要有abstract标识。

    抽象类的语法:

         abstract   class   类名{

                属性

                方法

    }

    PS:抽象类中可以没有抽象方法,但是有抽象方法的一定是抽象类。

    abstract class Cat{
        //抽象类
        String name;
        int age;
        public abstract void sleep();
    }
    
    class BigCat extends Cat{
        public void sleep(){
            System.out.println(this.name+"在地毯上睡觉");
            }
        }
        
    class SmallCat extends Cat{
        public void sleep(){
            System.out.println(this.name+"在窝里睡觉");
            }
        }
    class TestCat{
        public static void main(String[] args){
            BigCat bg = new BigCat();
            bg.name = "大黑";
            bg.sleep();
            SmallCat sc = new SmallCat();
            sc.name = "二黑";
            sc.sleep();
            }
        }

    抽象类的特点:

    1.抽象类不能被实例化

    2.如果一个子类继承了抽象类就必须实现抽象类里的所有抽象方法

    3.抽象类必须被子类继承才能使用子类实例化

    4.抽象类也可以继承抽象类,这样不需要实现父抽象类里的抽象方法

    5.抽象类的抽象方法不能和private,static,final共存。

    接口:

    一个抽象类中,如果抽象类中的所有方法都是抽象的,那么我们就可以把它定义为一个接口,接口是对行为的抽象,类是对属性和行为的抽象。

    语法:

         interface    接口名{

               方法的定义;

    }

    在接口中,每一个方法的定义都是抽象的,可以省略abstract,接口是不可以实例化的,需要有类来实现接口。

    实现接口的语法:

        class   类名    implements    接口名,接口名,...{

            //实现接的类必须实现接口中的所有方法

     }

    接口中的方法不能和static,final,private共存。

    接口中的属性默认都是static final 类型的。(通过接口名.属性名来访问,接口中的属性一般都是常量,并且不能修改,常量的名字规范是单词大写,多个单词之间使用下划线来分隔。)

    接口可以继承接口,可以实现多继承和多级继承。

    使用接口方式来计算圆,正方形的面积和周长

    //定义一个接口里面有计算面积和周长的方法
    interface CalInter{
        public double getArea();
        public double getLength();
        //定义一个常量π
        double PAI = 3.14;
        }
    
    //定义一个圆的类然后实现接口里的方法
    class Circle implements CalInter{
        //实现计算面积的方法,先定义圆的半径
        private double r;
        //定义一个可以传参数的构造器
        public Circle(double r){
            this.r = r;
            }
        //或者直接定义一个公共的set和get方法对r进行传参数和取值
        /**
        *public void setR(double r){
            this.r = r;
            }
         public double getR(){
            return r;
            }
        */
        //实现方法完成计算
        public double getArea(){
            return r*r*CalInter.PAI;
            }
        public double getLength(){
            return 2*r*CalInter.PAI;
            }
        }
        
    class CalculateArea{
        public static void main(String[] args){
            Circle c = new Circle(3);
            double area = c.getArea();
            double length = c.getLength();
            System.out.println("半径为3的圆的面积为:"+area+"    周长为:"+length);
            }
        }
  • 相关阅读:
    RESTClient使用
    web.xml 的加载过程
    I18N、L10N、G11N
    Oracle游标示例
    MyEclipse转换Eclipse项目无法启动问题(转)
    eclipse默认文件编码
    JAVA为什么要配置环境变量,怎样配置
    TODO Auto-generated method stub
    vc6开发ActiveX并发布全攻略(三)(转)
    高效使用hibernate-validator校验框架
  • 原文地址:https://www.cnblogs.com/chenttc/p/7756896.html
Copyright © 2020-2023  润新知