• Java 接口


    • Java只支持单继承,如果我们想封装现实生活中的多继承现象借口可以帮助我们。
    • 接口是抽象方法和常量值的集合。
    • 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
    • 接口定义举例
    public interface Runner
    {
        public static final int id = 1;
        
        public void start();   //不用写abstract
        public void run();
        public void stop();
    }
    

    接口特性


    • 接口可以多重实现。
    • 接口中声明的属性默认为public static final的,也只能是public static final的。解决C++中多继承出现的问题。
    • 接口中只能定义抽象方法,而且这些方法默认为public,也只能时public的。
    • 接口可以实现其它的接口,添加新的属性和方法。
    • 类可以实现接口通过implements语句,相当于继承。有了重写和继承,如果有interface这个成员变量指向子类对象,就可以实现多态。
    • 多个无关的类可以实现同一个接口。
    • 一个类可以实现多个无关的接口。多继承。
    • 使用什么接口只能看得到它包含的方法
    • 接口的引用可以指向所有实现了该接口的类对象。下面例子的Teacher,如果用Painter指向,只能看到paint和eat方法,如果用Singer指向,只能看到sing和sleep方法,相当于换了一个窗口来看Teacher。
    • 例子说明
    interface Singer
    {
    	public void sing();
    	public void sleep();
    }
    interface Painter
    {
    	public void paint();
    	public void eat();
    }
    class Student implements Singer
    {
    	private String name;
    	Student(String name)
    	{
    		this.name = name;
    	}
    	public void study()
    	{
    		System.out.println("studing");
    	}
    	public String getName()
    	{
    		return name;
    	}
    	public void sing()
    	{
    		System.out.println("student is singing");
    	}
    	public void sleep()
    	{
    		System.out.println("student is sleeping");
    	}
    }
    class Teacher implements Singer,Painter  //相当于多继承
    {
    	private String name;
    	Teacher(String name)
    	{
    		this.name = name;
    	}
    	public void teach()
    	{
    		System.out.println("teaching");
    	}
    	public void sing()
    	{
    		System.out.println("teacher is singing");
    	}
    	public void sleep()
    	{
    		System.out.println("teacher is sleeping");
    	}
    	public void paint()
    	{
    		System.out.println("teacher is painting");
    	}
    	public void eat()
    	{
    		System.out.println("teacher is eating");
    	}
    }
    public class Main
    {
    	public static void main(String args[])
    	{
    		Singer s1 = new Student("le");
    		s1.sing();s1.sleep();   //多态存在
    		Singer s2 = new Teacher("steven");
    		s1.sing();s1.sleep();   //多态存在
    		Painter p1 = (Painter)s2;
    		p1.paint();p1.eat();    //多态存在
    	}
    }
    输出结果:
    student is singing
    student is sleeping
    student is singing
    student is sleeping
    teacher is painting
    teacher is eating
    
  • 相关阅读:
    @SuppressWarnings("rawtypes") 是什么含义
    Oracle存在则更新,不存在则插入应用-merge
    word 2010中设置默认粘贴为 只保留文本粘贴【visio也适用于快捷键方式】
    List的remove()方法的三种正确打开方式
    纵表和横表的概念及其相互转换
    log4j.xml简单配置实现在控制台打印sql执行语句【加注释】
    NGUI例子Scroll View场景中item添加点击后自动滑到终点
    unity3d 日志捕捉
    Unity3D研究院之动态修改烘培贴图的大小&脚本烘培场景
    Unity3D研究之Prefab里面的Prefab关联问题
  • 原文地址:https://www.cnblogs.com/031602523liu/p/8654193.html
Copyright © 2020-2023  润新知