一、接口
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