• 接口,继承,抽象类


    多态:
    1、引用多态
    2、方法多态

    引用多态:
    父类的引用可以指向本类的对象
    父类的引用可以指向子类的对象

    public class Animal{
    }

    public class Cat extends Animal{
    }

    Animal an = new Animal();
    Animal cat = new cat();

    方法多态:
    创建本类对象时,调用的方法为本类方法
    创建子类对象时,调用的方法为子类重写的方法或者
    继承的方法。

    public class Animal{
      public void move()
      {
        System.out.println("move");
      }

    }

    //重写父类的方法move
    public class Cat extends Animal{
      public void move()
      {
        System.out.println("cat walk");
      }
    }

    Animal an = new Animal();
    Animal cat = new cat();

    an.move(); // move

    cat.move(); // cat walk
    --------------------------------------------------
    instanceof关键字
    引用类型转换
    1、向上类型转换(隐式/自动类型转换),是小类型到大类型的转换。
    2、向下类型转换(强制类型转换),是大类型到小类型。(存在风险)

    如何避免风险
    instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。

    Cat cat = new Cat();
    Animal animal = cat;//自动类型转换,向上类型转换

    Cat cat2 = (Cat)animal;//向下类型转换(强制类型转换)

    Dog dog = (Dog)animal;//存在问题!编译时 Dog类型,运行时 Cat类型。

    使用 instanceof 来避免上面的问题

    if(animal instanceof Dog)
    {
      Dog dog = (Dog)animal;
    }
    else
    {
      //输出错误信息
      "无法进行类型转换"
    }
    -----------------------------------------------------------
    抽象类
    使用规则:
    1、abstract定义抽象类
    2、abstract定义抽象方法,只有声明,不需要实现
    3、包含抽象方法的类是抽象类
    4、抽象类可以包含普通的方法,也可以没有抽象方法。
    5、抽象类不能直接创建,可以定义引用。

    子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);

    抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理; 
    子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);

    抽象类实际上就比普通类多了一些抽象方法而已,其他组成部分和普通类完全一样; 

    public abstract class Telphone{
      public abstract void call();
      public abstract void message();
    }

    子类
    public class CellPhone extends Telphone{

      //Override
      public void call()
      {
        //....
      }

      //Override
      public void message()
      {
        //...
      }
    }


    Telphone tel1 = new CellPhone();
    tel1.call();
    tel1.message();
    ----------------------------------------------------
    更详细的说明:
    http://blog.csdn.net/nvd11/article/details/18888415

    接口:
    接口可以理解为一种特殊的类,由公共静态常变量成员和公共的抽象方法所组成。

    接口定义:和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。

    [修饰符] interface 接口名[extends 父接口1,父接口2,...]
    {
      零到多个常量定义
      零到多个抽象方法
    }
    接口就是用来被继承,被实现的,修饰符一般建议用public
    注意:不能使用private和protected修饰外部接口

    类是单继承的,接口是可以多继承的。

    接口,系统会默认加上abstract关键字
    接口中的属性是常量,即使定义时不添加public static final修饰符,系统也会自动加上。
    不能用protected 或 private 来修饰成员, 否则编译失败.

    接口里不能定义构造方法

    类里面不能为接口的成员赋值
    类继承1个接口的话, 可以使用接口的成员, 但是不能为它们赋值, 因为接口的成员都是常量.

     

    接口中的方法只能是抽象方法,即使定义时不添加public abstract修饰符,系统也会自动加上。

    使用接口
    一个类可以实现一个或多个接口,实现接口使用implements关键字。Java中一个类只能继承一个父类,是
    不够灵活的,通过实现多个接口可以做补充。

    继承父类实现接口的语法:

    [修饰符] class 类名 extends 类名 implements 接口1,接口2,...
    {
      //如果继承了抽象类,需要实现继承的抽象方法
      //要实现接口中的抽象方法
    }
    类如果要继承父类,继承父类必须在实现接口之前。

    public abstract interface IPlayGame{
      public abstract void play();
    }

    public abstract class Telphone{
      public abstract void call();
      public abstract void message();
    }


    public class CellPhone extends Telphone implements IPlayGame{

      //Override
      public void call()
      {
      }

      //Override
      public void message()
      {
      }

      //Override
      public void play()
      {
      }
    }

    使用:
    Telphone tel1 = new CellPhone();
    tel1.call();
    tel1.message();

    IPlayGame playGame = new CellPhone();
    playGame.play();

    在接口使用过程当中,还经常与匿名内部类配合使用

    匿名内部类就是没有名字的内部类
    多用于关注实现而不关注实现类的名称
    IPlayGame playGame = new IPlayGame(){
      //Override
      public void play()
      {
        System.out.println("使用匿名内部类的方式实现接口");
      }
    };
    playGame.play();

    还可以:
    new IPlayGame(){
      //Override
      public void play()
      {
        System.out.println("使用匿名内部类的方式实现接口");
      }
    }.play();

  • 相关阅读:
    vue中计算属性computed和watch的区别
    sqlserver中pivot(行转列),unpivot(列转行)
    js本地缓存的方式Cookie、localStorage、sessionStorage
    Linux调度系统全景指南(中篇)
    Linux调度系统全景指南(终结篇)
    Linux调度系统全景指南(下篇)
    五层模型
    Linux内核概念
    网络性能
    PyMuPDF使用
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/8328529.html
Copyright © 2020-2023  润新知