zoukankan      html  css  js  c++  java
  • JAVA继承、多态与接口

       一、继承
    1、继承的优点
     代码的重用性
     子类可以扩展父类的属性和方法
     设计应用程序变得更加简单
     父类的属性和方法可用于子类
    2、如何判断类具有继承关系
     类和类的关系
     1)has-a(组合)
     2)is-a(继承)
    3、单继承和多继承
     单根性:
     在java中,一个类只能有一个父类
     传递性:
     子类可以将父类的属性和方法传递给自己的子类
    4、所有类的根类都是Object(超类,基类)
    5、方法重写(以后多态的使用要用到)@Override//注解
     1)子类的方法的返回值类型、方法名和形式参数列表,
     必须和父类中的是相同的
     2)子类的方法的访问修饰符不能比父类更严格
     3)子类中重写的异常不能抛出比父类更多的异常
    6、构造方法与继承
     不像一个超类的成员
     super加括号调用父类的构造器,也必须是语句块的第一句
     注意:默认情况下,子类的构造器会调用父类的无参构造器,
           当父类没有无参构造方法,而子类有无参构造方法时,
           需要指明调用的是什么构造方法。
    7、super关键字
     super.***和super(***);
    8、final关键字
     使用final修饰一个类,这个类不能再被继承
     使用final修饰一个方法,这个方法不能再被重写
    9、抽象abstract
     在编写类时,通常会在类中定义一些方法,用来描述该类所具有的行为。
     在类的方法中,我们编写代码
     注意:抽象类是不能被实例化的。
           同时抽象类和final不能同时出现,因为抽象类时需要被继承的
     抽象方法是没有方法主体的,
     抽象方法出现在抽象类中,
     抽象方法在子类中必须写出实体,即方法重写,除非子类也是抽象类
     意义:
      当我们的类或方法没有具体的业务意义的时候,需要用到抽象。
    补充:
     public、protected修饰的方法和成员可以被子类继承;
     而default看是否在同一个包中,在同一个包中可以被子类继承;
     private不可以被继承到。

      二、多态

       多态
    1、使用父类的类型引用子类的实例
     /*用数组保存5辆汽车:3轿车2客车*/
     MotoVehicle[] vehicles = new Motovehicle[5];
     vehicles [0] = new Car("1","宝马","宝马550i");
     vehicles [1] = new Car("2","宝马","宝马550i");
     vehicles [2] = new Car("3","宝马","宝马550i");
     vehicles [3] = new Bus("4","宝马","宝马550i");
     vehicles [4] = new Bus("5","宝马","宝马550i");
    2、实现多态的步骤:(动态的多态:需要在运行当中才知道该调用什么方法)
     1)编写父类、派生子类
     2)在子类中重写父类的方法
     3)用父类的数据类型引用子类对象
     4)调用重写的方法
     补充:静态的多态叫做方法重载
    3、补充
     类型转换instanceof
     我们在使用Employee salary = new Salary("",1,"",2,200000);时,
     用到了向上转换;而Salary s2 = (salary)salary;却是向下转换,
     但是我们不知道转化后是否正确。
     System.out.println(salary instanceof Employee); //true
     System.out.println(salary instanceof Salary);  //true
     System.out.println(salary instanceof Hourly); //false

      三、接口

     1、写法  

    public interface 类名();

    2、注意问题  

    编译的后缀名依然是.java,仍然可以保存为.class;  

    接口是没有构造方法的,也不能被实例化

     可以省略掉public 和 abstract  

    接口中的方法都是抽象方法

     记住把注释写好!

     在接口中的成员变量都是公有、静态、常量的  

    如:public static final name = "abc";

    3、实现接口  

    implements 后加接口名称  

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

    一个类可以实现多个接口(类似于多重继承)  

    Implements和extends都是is-a的关系  

    接口里可以声明属性,默认都是public static final  

    接口继承接口是可以多重继承的(一个接口可以继承多个接口)

    4、使用接口的原则  

    1)使用接口解决多继承  

    2)使用接口为外部类添加功能

    3)以面向对象的角度考虑,将一个类与生俱来的特征和行为和  

    依赖于外部的可选特征和行为分离,让类尽可能的单纯,即接口

    5、接口的优点  

    1)将设计和实现分离,对外(调用者)隐藏了实现(  而通常调用者也不需要关心实现)  

    2)面向接口编程是oop的核心

    6、接口和抽象类的区别  

    1)接口里的所有方法都是abstract的,所有的属性都是public static final  

    2)抽象类是接口的部分实现,既能定义abstract方法,  

    也能定义普通方法的属性,比接口更灵活

    补充:  

    获取当前时间  

    Data date = new Date();

      四、静态成员变量

       静态类成员  

    用类成员(类变量和类方法)

    不需要创建实例,可以通过:  className.variableName的形式直接调用(类名打点调用)

    1、静态初始化块  static {   System.out.println("静态代码块");  }

    2、非静态初始化块(成员代码块)    {   System.out.println("非静态代码块");  }    

    注意:在同一个类中,静态代码块和非静态代码块都在构造器之前被执行。       

    当这个类继承父类的时候,非静态代码块在父类的构造方法之后执行   

    即:   

    静态代码块   

    父类构造器   

    非静态代码块   

    子类构造器        

    静态代码块是所有成员共享的,所以创建对象只执行一次。

    内部类  

    在java中,还可以在类的内部定义类。

    这种在类的内部定义的类,称为内部类。  

    内部类所在的类称为外部类

    内部类的分类  

    按位置的不同分为成员内部类(写在类当中)和局部内部类(写在方法当中)  

    成员内部类的特例是静态内部类  

    局部内部类的特例是匿名内部类

     注意:内部类的方法可以访问外部的成员,但静态内部类只能引用静态成员和方法       

    局部内部类调用的成员变量是由final修饰的        

    静态内部类的实例化是需要用外部类类名打点实例化的  

    成员内部类的创建:   Outter outter = new Outter();   Outter.Inner1 = outter.new Inner1();

    局部内部类的创建:   outter.show();(我们已经局部内部类所在的方法中初始化对象)

    匿名内部类的创建:   有时候我们局部内部类所在的方法引用到一个接口时,   

    而接口的内容很少,我们不想再为接口创建一个类,就要用到   

    匿名内部类:    

    同上,    

    outter.print(new Inter(){     

      @Override     

      public void printflnface(){     

      System.out.pirntln("匿名内部类打印");    

      }   

    });       

  • 相关阅读:
    vue学习
    BBS登录注册技术点归纳
    BBS项目模态框的使用
    django后台管理系统
    java 之 jsp简介
    http 之 CORS简介
    web 之 session
    linux 之学习路线
    Ubuntu 之 win10更新ubuntu启动项消失
    Web 之 Cookie
  • 原文地址:https://www.cnblogs.com/lightskyblue/p/4420206.html
Copyright © 2011-2022 走看看