• 接口(interface)与多态


    1. 接口(interface)是抽象方法与常量值的集合;

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

    3. 接口中声明的属性默认为:public static final,也只能是:public static final,(接口中成员变量的定义);

    4. 接口中只能定义抽象方法,而且这些方法默认为public,也只能是public的;

    5. 接口可以继承其他的接口,并添加新的属性和抽象方法;

    6. 多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口;

    7. 与继承关系类似,接口与实现类之间存在多态性:

        多态的三个条件:继承,重写,父类引用指向子类对象;

        由于Java中没有多继承,一个类只能有一个父类。一个父类可以有多个子类,而在子类里可以重写父类的方法;

        用接口可以实现多继承,一个类或是可以同时实现多个接口;

        一般而言,接口有利于代码的扩展,而继承则有利于代码功能的修改

    8. Demo

    Demo_1

    public interface Runner{
    	int id = 1; // 相当于:public static final int id = 1;
    	public void start();
    	public void run();
    	public void stop();
    }
    // 正确

     Demo_2

    interface Singer{
    	public void sing();
    	public void sleep();
    }
    
    class Sudents implements Singer{
    	private String name;
    	
    	public Sudents(String name) {
    		this.name = name;
    	}
    	public void study(){
    		System.out.println("Studying");
    	}
    	public String getName(){
    		return name;
    	}
    	public void sing() { // @Override
    		System.out.println("Student is Singing");
    	}
    	public void sleep() { // @Override
    		System.out.println("Student is sleping");
    	}
    }
    // 正确
    

     Demo_3

    interface Singer{
    	public void sing();
    	public void sleep();
    }
    interface Painter{
    	public void paint();
    	public void eat();
    }
    class Student implements Singer{
    	private String name;
    	public Student(String name) {
    		this.name = name;
    	}
    	public void study(){
    		System.out.println("studying");
    	}
    	public String getName(){
    		return name;
    	}
    	public void sing() { // @Override
    		System.out.println("student is singing");
    	}
    	public void sleep() { // @Override
    		System.out.println("student is sleeping");	
    	}
    }
    class Teacher implements Singer, Painter{
    	private String name;
    	public Teacher(String name) {
    		this.name = name;
    	}
    	public String getName(){
    		return name;
    	}
    	public void teach(){
    		System.out.println("teaching");
    	}
    	public void paint() { // @Override
    		System.out.println("teacher is painting");
    	}
    	public void eat() { // @Override
    		System.out.println("teacher is eating");
    	}
    	public void sing() { // @Override		
    		System.out.println("teacher is singing");
    	}
    	public void sleep() { // @Override
    		System.out.println("teacher is sleeping");
    	}
    }
    public class Test {
    	public static void main(String[] args){
    		Singer s1 = new Student("s1");
    		s1.sing();
    		s1.sleep();
    		Singer t1 = new Teacher("t1"); //相当于继承中的父类引用指向子类对象
    		t1.sing();
    		t1.sleep();
    		Painter p1 = (Painter) t1; //相当于继承中的父类引用指向子类对象
    		p1.paint();
    		p1.eat();
    	}
    }
    // 正确

     Demo_3的运行结果:

         student is singing
         student is sleeping
         teacher is singing
         teacher is sleeping
         teacher is painting
         teacher is eating

  • 相关阅读:
    Sharepoint 2010 无法上传文件的问题
    复杂领域的Cynefin模型和Stacey模型
    SCOM Visio监控 与sharepoint 2010 整合
    HillStone上网认证客户端
    jQuery插件手把手教会(二)
    jQuery插件手把手教会(一)
    jQuery+css+div--一些细节详解
    jQuery+css+div一些值得注意的常用语句
    找不到对应的webservice配置参数[ProcessService]
    NC保存报dirty解决方法
  • 原文地址:https://www.cnblogs.com/bosongokay/p/6746103.html
Copyright © 2020-2023  润新知