zoukankan      html  css  js  c++  java
  • 学习Java的Day04

    知识点

    接口:

      1.接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类

     

      2. 接口中只允许出现抽象方法,不能出现非抽象方法

     

      3. 接口的源文件也是java文件,编译后的文件也是.class,所以可以把接口看作一个特殊的类

     

    注意:

    • 接口是供别的类去实现的,并且要实现他的抽象方法的,所以接口中方法的访问修饰符必须定义成public

    • 接口中不能定义普通的成员变量,只能定义成public static final 成员变量

    • 一个类可以同时实现多个接口,但是需要将抽象方法进行实现,创建接口的时候修饰符可以省略, 系统会自动加上,实现的时候,就必须要添加public

    接口的特点:

    • 接口不能创建对象

    • 接口的变量使用public static final修饰,如果不写默认添加

    • 接口的方法为public abstrict,如果不写默认添加

    • 子类必须重写接口中所有的抽象方法后,才能创建对象,

    • 如果子类不不能够重写所有的抽象方法,那么子类必须定义成抽象类

    接口的作用:

    • 扩展原有类的功能
    • 设定规则
    • 降低耦合性

    问题分析:

    1.为什么接口可以实现多继承????

      答:因为接口中的方法都是没有实现的,所以就算有两个父接口的方法名称相同,子类实现接口的时候也不会有什么影响,

        只要重写即可,所以接口与接口之间是存在多继承的。

    小小练习:

    package com.day04;
    
    public interface HDMI {
    
        //获取输入信号名称
        void  input();
    
        //获取设备名称
        String  getName();
    }
    
    ///////////////////////////////////////////////////////////
    
    class computer implements HDMI{
    
        @Override
        public void input() {
            System.out.println("电脑信号输入。。。。。。");
        }
    
        @Override
        public String getName() {
    
            return "电脑设备";
        }
    }
    
    /////////////////////////////////////////////////////////////
    
    class GameMachine implements HDMI{
        @Override
        public void input() {
            System.out.println("游戏机信号输入。。。。。。");
        }
    
        @Override
        public String getName() {
            return "游戏机设备";
        }
    }
    
    //////////////////////////////////////////////////////////////////
    
    class  TV {
        public  void output(HDMI hdmi ) {
            //设备录入
            hdmi.input();
            //获取设备名称
            System.out.println("设备名称为:" +hdmi.getName());
        }
    }
    
    class  TestHDMI{
    
        public static void main(String[] args) {
            //呈现电脑画面
            computer com = new computer();
            GameMachine game = new GameMachine();
            //准备终端设备
            TV tv = new TV();
            tv.output(game);
        }
    }
    

     

     

    多态: 当一个类能表现出多种状态的时候,我们称这种现象为多态现象


    多态的表现形式:让父类的变量去指向子类对象的地址

    条件:必须有继承关系

    多态的表达形式:  父接口/父类   变量  =   new     子类/父接口的实现类的对象

     

    注意:同一个父类的方法会被不同的子类重写。在调用方法时,调用的为各个子类重写后的方法。

    多态的特点 

    • 对于成员方法:编译的时候看=左边,运行的时候看=右边

    • 对于成员变量:编译的时候看=左边,运行的时候看=左边

     

    instanceof关键字

      如果直接进行强制转换的时候有可能会出现问题,所以可以使用instanceof进行判断如 对象 instanceof 类名  判断左边的对象与右边的变量是否有所属关系。

     练习简单的多态

    package com.day04.work01;
    
    import java.util.Random;
    
    public class People {
        /*
        定义一个类是People,定义两个类,一个是Man,一个是 Woman,Man中有个属性是老婆,有一个方法 lol,
        Woman中有个属性是老公,有一个方法shopping,
        还 有一个方法生孩子,先判断是否有老公,如果有,就创建 一个对象50%概率是man,50%概率是woman,有一个 返回值,
        最后如果是男的调用lol,如果是nv的调用 shopping
         */
    }
    
    class Man extends People {
    
        Woman laopo;
    
        void lol() {
            System.out.println("玩LOL。。。。。。");
        }
    
    }
    
    class Woman extends People {
    
        Man laogong;
    
        void shopping() {
            System.out.println("购物。。。。。。。");
        }
    
        public People getBaby() {
    
            People peo = null;
            if (laogong != null) {
                Random ran = new Random();
                int x = ran.nextInt(2);
                if (x == 0) {
                    peo = new Man();
                } else if (x == 1) {
                    peo = new Woman();
                }
            }
            return peo;
        }
    }
    
    class TestPeople {
        public static void main(String[] args) {
            Man man = new Man();
            Woman woman = new Woman();
            woman.laogong = man;
    
            People peo = woman.getBaby();
            if (peo == null) {
                System.out.println("没有老公,不能生孩子");
                return;
            }
            if (peo instanceof Man) {
                Man m = (Man) peo;
                m.lol();
            } else {
                Woman wo = (Woman) peo;
                wo.shopping();
            }
    
        }
    }
    

      

    构造方法特点:

    • 构造方法名称必须和类型保持一致。

    • 构造方法没有具体的返回值。

    为什么子类的构造方法会去调用父类的构造方法呢????

     

       因为构造方法本身就是初始化对象的成员变量的,父类 的构造方法也是这个目的,如果不去调用,我们就不知道父类做了什么操作,所以才会隐式的去调用super();

     

    子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。这样,才可以使用父类中的内容。

     

     

    如果子类会默认调用父类的无参构造方法,如果父类中又没有无参的构造方法,程序会出现什么问题?编译器 会自动去找到对应的有参的构造方法么?????

     

      如果父类中没有空参构造方法,那么子类的的构造方法 就会报错,需要我们显示的调用父类的有参数的构造方法

     

  • 相关阅读:
    Mysql面对高并发修改的问题处理【2】
    HSF处理流程分析
    com.jcraft.jsch.JSchException: invalid privatekey
    linux常用命令
    VPS教程:VPS主机能PING通但是SSH无法连接
    Windows 和Linux 不同操作系统的VPS有哪些区别,如何选择?
    Windows VPS有哪些?
    VPS教程:搭建个人云笔记服务器
    VPS搭个人网盘,seafile、kodexplorer、h5ai谁更合适?
    VPS教程:搭建个人网盘—seafile
  • 原文地址:https://www.cnblogs.com/ZhuX-H/p/13205052.html
Copyright © 2011-2022 走看看