zoukankan      html  css  js  c++  java
  • java day5

     多态

    是指同一行为,具有多个不同表现形式。
    父类类型 变量名 = new 子类对象;
    变量名.方法名();

    向下转型:父类类型向子类类型 向下转换的过程,这个过程是强制的。

    为了避免ClassCastException的发生

    向下转型必 须使用isstanceof判断

    变量名 instanceof 数据类型
    如果变量属于该数据类型,返回true。
    如果变量不属于该数据类型,返回false。

    接口多态的综合案例

    笔记本电脑

     

    USB接口,包含开启功能、关闭功能

    public interface USB {
      public abstract void open();

      public abstract void close();

    }


    笔记本类,包含运行功能、关机功能、使用USB设备功能

    public class Computer {

      public void powerOn() {
        System.out.println("open computer");
    }

      public void powerOff() {
        System.out.println("close computer");
    }

      public void useDevice(USB usb) {
        usb.open();
        if (usb instanceof Mouse) {
          Mouse mouse = new Mouse();
          mouse.click();
        } else if(usb instanceof KeyBorad) {
          KeyBorad keyBorad = new KeyBorad();
          keyBorad.push();
    }
          usb.close();
    }
    }


    鼠标类,要实现USB接口,并具备点击的方法

    public class Mouse implements USB {

        @Override
        public void open() {
        // TODO Auto-generated method stub
          System.out.println("open mouse usb");
    }

        @Override
        public void close() {
        // TODO Auto-generated method stub
          System.out.println("close mouse usb");
    }

        public void click() {
          System.out.println("click mouse");
    }
    }


    键盘类,要实现USB接口,具备敲击的方法

    public class KeyBorad implements USB {


        @Override
        public void open() {
        // TODO Auto-generated method stub
          System.out.println("open keyboad usb");
    }

        @Override
        public void close() {
        // TODO Auto-generated method stub
          System.out.println("close keyboad usb");

    }
        public void push() {
          System.out.println("push keyboard");
    }

    }

    main

    public class DemoMain {

      public static void main(String[] args) {
        Computer computer = new Computer();
        computer.powerOn();


        USB usbMouse = new Mouse();
        computer.useDevice(usbMouse);

        USB keyboard = new KeyBorad();
        computer.useDevice(keyboard);
        computer.powerOff();
    }

    }

    final关键字

    不可改变。可以用于修饰类、方法和变量。

    类:被修饰的类,不能被继承。

    final class 类名 {
    }

    其中所有的成员方法都无法重写

    方法:被修饰的方法,不能被重写。

    修饰符 final 返回值类型 方法名(参数列表){
    //方法体
    }

    变量:被修饰的变量,不能被重新赋值。

      1. 局部变量——基本类型

      final int a;

      2. 局部变量——引用类型

      final User u = new User();(是u的地址不可改变,内容可以)

      3. 成员变量

      显示初始化: final String USERNAME = "张三";

      构造方法初始化:final String USERNAME ;

      只能二选一

    被final修饰的常量名称,一般都有书写规范,所有字母都大写。

    权限修饰符


    public:公共的。
    protected:受保护的
    default:默认的
    private:私有的

    不同权限的访问能力

     

    如果没有特殊的考虑,建议:
    成员变量使用private ,隐藏细节。
    构造方法使用public ,方便创建对象。
    成员方法使用public ,方便调用方法。

    内部类
    将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。

    修饰符 class name { //外部类

      修饰符 class name { //内部类

        }

    }

    内部类可以直接访问外部类的成员,包括私有成员。


    外部类要访问内部类的成员,必须要建立内部类的对象。

      创建内部类对象

      外部类名.内部类名 对象名 = new 外部类型().new 内部类型();

    内部类的同名访问

    public class Outer {

    int num =10;

    public class Inner{

    int num = 20;

    public void method() {

    int num = 30;

    System.out.println(num);//局部变量

    System.out.println(this.num);//内部类

    System.out.println(Outer.this.num);//外部类的成员变量

    }

    }

    }

      局部内部类对象(定义在一个方法内部),只有当前所属方法才可以使用

      修饰符 class 外部类名称{

          修饰符 返回值类型 外部类方法名(参数)

              {class 局部类名{

                }}

          }

    public class Outer {

    public void methodOuter() {

    class Inner{

    int num = 10;

    public void methodIneer() {

    System.out.println(num);

    }

    }

    Inner inner = new Inner();

    inner.methodIneer();

    }


    }

    public class DemoO {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    Outer objOuter = new Outer();

    objOuter.methodOuter();

    }

    }

    匿名内部类【重点】

    如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,

    那么这种情况下可以省略该类的定义,使用【匿名函数类】

    定义:

    接口名称 对象名 = new 接口名称();{

      覆盖重写所有匿名方法

    }

    定义接口:

    public interface MyIterface {

    public abstract void method();

    }

    创建匿名内部类,并调用:

    public class DemoMMAIN {

    public static void main(String[] args) {

    MyIterface objIterface = new MyIterface() {

    @Override

    public void method() {

    System.out.println("实现匿名内部类"); }

    };

    objIterface.method();

    }

    }

    省略了一个单独写一实现类

    public class IntfaceIplement implements MyIterface{

    @Override

    public void method() {

    System.out.println("实现类覆盖重写了方法");

    }

    }

    注意:

      1.匿名对象在调用方法的时候,只能调用唯一一次

      如果希望同一对象,调用多次方法,那么必须给对象起个名字

      2.匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
    匿名对象跟匿名内部类不是一回事

    内部类将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。

     

  • 相关阅读:
    63.C++异常
    62.C++文件操作list实现内存检索,实现两千万数据秒查
    61.C++文件操作实现硬盘检索
    ios之数据持久化
    ios NSRange
    安排
    接口隔离原则
    Liskon替换原则
    开放封闭原则
    单一职责原则
  • 原文地址:https://www.cnblogs.com/njuwyx/p/12682391.html
Copyright © 2011-2022 走看看