java 实现接口类图_java 实现接口类图

一.抽象类:

1.什么是抽象类

类和类之间具有共同特征,将这些共同特征提取出来。形成的就是抽象类。类本身不存在,所以抽象类无法创建对象.

java 实现接口类图_开发语言_02


抽象类无法实例化创建对象,为什么?

抽象类是类和类之间共有的特征,将这些具有共同特征的类在进一步抽象形成抽象类,由于类本身是不存在的,所以抽象类无法创建对象。

2.抽象类属于什么类型

抽象类是属于数据引用类型。

3.抽象类怎么定义

语法:
 [修饰符列表] abstract class 类名{
        类体;
}

4.一些概念

  • 抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被继承的
  • final和abstract是不能联合使用的,这两个关键字是对立的
  • 抽象类的子类可以是抽象类
  • 抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的
  • 抽象类关联到一个概念:抽象方法。什么是抽象方法呢?
    抽象方法表示没有实现的方法
  • 特点一:没有方法体,以分号结尾
  • 特点二:前面修饰符列表中有abstract关键字
  • 抽象类中不一定有抽象方法,但抽象方法必须出现在抽象类中。
  • 一个非抽象的类继承抽象类,必须将抽象类中的抽象方法实现/重写/覆盖。
  • java 实现接口类图_开发语言_03

二.接口

1.接口的基础语法

  • 接口也是一种引用数据类型,编译之后也是一个.class字节码文件
  • 接口是完全抽象的(抽象类是半抽象)或者也可以说接口是特殊的抽象类
  • 接口怎么定义,语法是什么?
    [修饰符列表] interface 接口名()
  • 接口支持多继承,一个接口可以继承多个接口
  • 接口中只包含两部分内容:常量、抽象方法
  • 接口中所有元素都是public修饰的(都是公开的)
  • 接口中的抽象方法定义时,public abstract修饰符可以省略
  • 接口中的方法都是抽象方法,所以接口方法中不能有方法体
  • 接口常量中的public static final可以省略
    注意:(1)类和类之间叫做继承,接口和接口之间叫做实现。别多想,仍然可以将“实现”看作“继承”。继承使用extends关键字完成,实现使用关键字implements完成
       (2)当一个非抽象类实现接口的话,必须将接口的所有方法实现(覆盖/重写)
  • 一个非抽象的类。实现接口的时候,必须将接口的所有方法实现
  • 一个类可以实现多个接口
  • 使用接口,可以使用多态

例子一:接口多态联合使用

public class Test01{
		public static void main(String[] args){
			//错误:Mymath是抽象的无法实例化
			//new Mymath();
			//能使用多态吗?
			//可以
			//Animal a = new Cat();
			
			//父类型的引用指向子类型的对象
			Mymath mm = new MymathImpl();
			//调用接口里面的方法(面向接口编程)
			int result1 = mm.sum(10,20);
			System.out.println(result1);

			int result2 = mm.sub(20,10);
			System.out.println(reault2);	
		}
}
//特殊的抽象类,完全抽象的,叫做接口
interface Mymath{
	double PI =  3.1415926;
	int sum(int a, int b);
	int sub(int a, int b);
}

例子二:一个类可以实现多个接口

interface A{
	void m1();
}
interface B{
	void m2();
}
interface C{
	void m3();
}
class D implements A,B,C{
	//实现接口A的m1()
	public void m1(){	
	}
	//实现接口B的m2()
	public void m2(){
	}
	//实现接口C的m3()
	public void m3(){
	}
}

注意:一个类可以同时实现多个接口,这种机制弥补了java中类和类只支持单继承,实际上单继承是为了简单而出现的,但现实中存在多继承,java中的接口弥补了单继承带来的缺陷

接口A和接口B之间没关系,也可以强转,编译过程不报错,运行时可能会出现ClassCastException异常。编译没问题,运行结果有问题,像之前一直一样,需要先 if + instanceof 进行判断。

例子三:继承和实现都存在的话怎么写?
  extends关键字在前,implements关键字在后

public class Test02{
		public static void main(String[] args){
		}
}
//动物类:父类
class Animal{
}

//可飞翔的接口(是一对翅膀)
interface Flyable{
	void fly();
}

//动物子类:猫类
//Flyable是一个接口,是一对翅膀的接口,通过接口插到猫身上,让猫变得可以飞翔
class Cat extends Animal implements Flyable{