Java面向对象思想精华(六)

一、接口

1.接口的定义

⑴ 可以看成是特殊的一种抽象类;
⑵ 而且只包含抽象方法。

2.接口的语法

(1) 定义通过 interface 关键字定义;
(2) 接口中不可以定义成员变量,可以定义常量;
(3) 只可以定义没有方法体的方法(默认我抽象方法)。
public abstract void methodName();
public abstract 可以省略不写。

interface Inter12{
    
    
//	int a;    //不能定义成员变量
	static final int A1 = 1;
	public abstract void Aoo();//接口只包含抽象方法,抽象方法没有方法体实现
	void Boo();//接口中抽象方法可忽略不写public abstract
}

3.接口的实现

一个类可以实现多个接口,实现多个接口用逗号分隔。
3.1. 通过 implements 关键字实现接口;
3.2. 一个类实现了接口后必须实现该接口中定义的所有方法;
3.3. 接口不能被实例化;
3.4. 接口可以作为一种类型声明变量,一个接口类型的变量,
可以引用实现了该接口的类对象(向上造型)。
接口名 声明变量 = new 类名();

public class InterfaceDemo2 {
    
    
	public static void main(String[] args) {
    
    
//		Inter12 o1 = new Inter12();接口不能被实例化
		Inter12 o2 = new Coo1();//向上造型 
	}
}

interface Inter12{
    
    
//	int a;    //不能定义成员变量
	static final int A1 = 1;
	public abstract void Aoo();//接口只包含抽象方法,抽象方法没有方法体实现
	void Boo();//接口中抽象方法可忽略不写public abstract
}

class Coo1 implements Inter12{
    
    
	public void Aoo() {
    
    }
	public void Boo() {
    
    }
}

interface Inter13{
    
    
	public void a1();
}

class Doo1 implements Inter12,Inter13{
    
    

	public void a1() {
    
    }
	public void Aoo() {
    
    }
	public void Boo() {
    
    }	
}

4.接口的继承与实现

(1) 接口可以继承接口(extends 关键字)。
子接口继承父接口中定义的所有方法(即实现父接口的方法)。
(2) 若又继承又实现接口时,应先继承后实现。
※ 某个类实现了某个接口后必须实现该接口中定义的所有方法(重写)。

interface Inter12{
    
    
//	int a;    //不能定义成员变量
	static final int A1 = 1;
	public abstract void Aoo();//接口只包含抽象方法,抽象方法没有方法体实现
	void Boo();//接口中抽象方法可忽略不写public abstract
}
class Coo1 implements Inter12{
    
    
	public void Aoo() {
    
    }
	public void Boo() {
    
    }
}
interface Inter13{
    
    
	public void a1();
}
class Doo1 implements Inter12,Inter13{
    
    

	public void a1() {
    
    }
	public void Aoo() {
    
    }
	public void Boo() {
    
    }	
}
interface Inter14 extends Inter13{
    
    
	public void Aoo();//继承了接口后,必须实现父类中定义的所有方法(抽想方法)
	public void Boo();
}
abstract class Eoo1{
    
    
	void b() {
    
    }
}
/*
 * 又继承又实现,则先继承父类,再实现接口
 */
class Foo extends Eoo1 implements Inter13{
    
     
	public void b() {
    
    }
	public void a1() {
    
    }
}

二、多态:

1.意义:

1)同一类型的引用,指向不同的对象时,有不同的实现
----行为的多态: cut()、run()、sleep()…
2)同一个对象,被造型为不同的类型时,有不同的功能
----对象的多态:我、你、树…

2.向上造型:

2.1. 超类型的引用指向派生类的对象
2.2. 能造型成为的类型有: 超类+所实现的接口
2.3. 能点出来什么,看引用的类型

3.引用类型强制转换成功的条件只有如下两种:

3.1. 引用所指向的对象,就是该类型
3.2. 引用所指向的对象,实现了该接口或继承了该类
例如下例子:

人 p1 = new 理发师();
人 p2 = new 医生();
人 p3 = new 演员();

p1.cut(); //剪发
p2.cut(); //看病
p3.cut(); //表演

abstract class{
    
    
  abstract void cut();
}
class 理发师 extends{
    
    
  void cut(){
    
     剪发 }
}
class 医生 extends{
    
    
  void cut(){
    
     看病 }
}
class 演员 extends{
    
    
  void cut(){
    
     表演 }
}

强转时若不符合如上两种条件,则发生 ClassCastException 类型转换异常
建议:在强转之前先通过 instanceof 来判断引用指向的对象是否是该类型

public class MultiTypeDemo {
    
    
	public static void main(String[] args) {
    
    
		Aoo o = new Boo(); //向上造型
		Boo o1 = (Boo)o; //o所指向的对象,就是Boo类型
		Inter1 o2 = (Inter1)o; //o所指向的对象,实现了Inter1接口
		o2.a();
		//Coo o3 = (Coo)o; //ClassCastException类型转换异常
		if(o instanceof Coo) {
    
    
			Coo o4 = (Coo)o;
		}else {
    
    
			System.out.println(123456);
		}
	}
}

interface Inter1{
    
    
	public void a();
}
class Aoo{
    
    
}
class Boo extends Aoo implements Inter1{
    
    
	public void a() {
    
    
		System.out.println("实现Inter的方法");
	}
}
class Coo extends Aoo{
    
    
}

后续的内容请耐心等等,马上就来!写作不易请点个赞3Q
若有错误之处,请各位点评下

所有章节目录在此处:https://blog.csdn.net/qq_41254299/article/details/106638651

转载请注明出处:https://blog.csdn.net/qq_41254299

本文出自【Superclover_的博客】

猜你喜欢

转载自blog.csdn.net/qq_41254299/article/details/108265297
今日推荐