zoukankan      html  css  js  c++  java
  • java之接口

    有时必须从几个类中派生出一个子类,继承它们所有的属性和方法,但是,Java不支持多继承,就有了接口,就可以得到多重继承的效果。

    接口是抽象方法和常量值的定义的结合;

    从本质上讲,接口是一种特殊的抽象类,这种抽象类中只含有常量和方法的定义,而没有变量和方法的实现;

    实现接口类:class SubClass implements interfaceA{}

    一个类可以实现多个接口,接口亦可以继承其它接口;

    接口的特点:

    • 用Interface来定义;
    • 接口中的所有成员变量都默认是由public static final 修饰的;
    • 接口中的所有方法都是默认由public abstract修饰的;
    • 接口没有构造器;
    • 接口采用多层继承机制;

    接口定义举例:

    public interface Runner{
        int ID = 1;
        void start();
        public void run();
        void stop();
    }

    实现接口的类中必须提供接口中的所有方法的具体实现,方可实例化,否则需要声明为抽象类

    接口的主要作用是被实现类实现;

    与继承关系类似:接口和实现类中间存在多态性;

    当存在继承和实现关系时,先继承后实现;

    抽象类在新增抽象方法时存在问题:父类新增抽象方法,子类必须实现该抽象方法,否则子类必须声明为抽象类;

    解决方法:新建一个接口,接口中为该抽象方法,让子类去实现;

    举个例子:会唱歌的厨师是个好老师。

    如果用抽象类来实现:老师--继承--厨师--继承--歌者--继承--人,但是老师、厨师、歌者之间并没有相应的关系;

    如果用接口实现:老师--继承--人,然后老师实现厨师接口,老师实现歌者接口;

    Person.java

    package inf;
    
    public abstract class Person {
        String name;
        int age;
        int sex;
        
        abstract void showInfo();
        
    }

    Cooking.java

    package inf;
    
    public interface Cooking {
        void fry();
    }

    Singing.java

    package inf;
    
    public interface Singing {
        void singing();
    }

    SCTeacher.java

    package inf;
    
    public class SCTeacher extends Person implements Cooking,Singing{
        String course;
        
        public void setInfo() {
            super.name = "tom";
            super.age = 12;
            super.sex = 1;
            this.course = "数学";
        }
        
        public void showInfo() {
            System.out.println("姓名:"+super.name
                    +"
    "+"年龄:"+super.age+"
    "
                    +"性别:"+super.sex);
            System.out.println("教的课程是:"+this.course);
        }
        public void fry() {
            System.out.println("老师的炒菜很好");
        }
        public void singing() {
            System.out.println("老师的唱歌很好");
        }
    }

    Main.java

    package inf;
    
    public class Main {
        public static void main(String[] args) {
            SCTeacher sc = new SCTeacher();
            sc.setInfo();
            sc.showInfo();
            sc.fry();
            sc.singing();
            
    //        Cooking c = new SCTeacher();
    //        c.fry();
        }
    }

    输出:

    姓名:tom
    年龄:12
    性别:1
    教的课程是:数学
    老师的炒菜很好
    老师的唱歌很好

  • 相关阅读:
    B16-高可用OpenStack(t版)集群分布式存储Ceph部署
    B15-openstack高可用(t版)-cinder计算节点集群
    B14-openstack高可用(t版)-cinder控制节点集群
    B13-openstack高可用(t版)-horazion计算节点集群
    B12-openstack高可用(t版)-Neutron计算节点集群
    B11-openstack高可用(t版)-Neutron控制/网络节点集群
    mysql(windows 10 安装)
    docker 容器 centos + tomcat + jdk
    docker 安装
    docker 把镜像打包成文件
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12055230.html
Copyright © 2011-2022 走看看