接口的学习
接口的定义
使用interface关键字来定义一个接口
接口的定义与类相近,接口其实可以看做一个特殊的类(编译后生成的也是.class文件),接口是抽象方法的集合
{修饰符} interface 接口名 {extend 父接口列表} {
public static final 常量;
public abstract 方法 ;
}
注意:接口中默认在方法名前加public abstract,因为只有public修饰的才能被继承重写,如果不能重写那这个接口就没有意义
关于接口的注意事项:
1.接口不能够拥有具体的实例也即不能new对象出来,如果能new对象,那么没有对象的属性,接口对象的方法都不能执行。那么这个对象没有意义,没有意义那为什么要new出来。
2.接口不能被创建对象,但接口中的抽象方法由实现类实现。实现类使用implements关键字实现接口,可以同时实现多个接口,使用逗号分割
3.许多人认为接口中不能够拥有方法体,这其实是片面的,用default 和 static 修饰的方法可以拥有方法体。
为什么呢?
因为 default 修饰的方法体与实例化对象无关,符合接口的特性。
而 static 修饰的代码在类加载前便已经加载完成,符合接口的特性。
4.java的类是单继承多实现,但接口是解耦合,高内聚,多实现,多继承
Java中类不能多继承但接口可以可以用extend去继承一个或者多个接口,用逗号分割继承的接口名
5.和类一样接口的文件名要和接口名一样
6.Java中类不能多继承但接口可以
接口的意义
很多人认为接口不就是一个抽象类吗?要接口干什么?接口中的方法就很强大吗?接口中定义的都是抽象方法,没有任何具体的实现貌似没有任何意义。接口中的方法就是一个简单的规定啊!接口貌似没有太大的作用。接口最大最重要的意义就是让实现类要按照这个接口中的方法的标准去写。实现类去实现接口就是对接口的一种拓展,而接口的实现可以看做是一种特殊的继承,既然是继承,那么接口便也可以用于多态————面向对象的核心!!
关于接口的简单实训练习
package com.ClassName;
public interface ClassName {
String getClassName();
}
package com.Company;
import com.ClassName.ClassName;
public class Company implements ClassName {
@Override
public String getClassName () {
return this.getClass().getName();
}
}
package com.Test;
import com.Company.Company;
public class Test {
public static void main (String[] args) {
Company c = new Company ();
System.out.println (c.getClassName ());
}
}
附:instanceof关键字学习
instanceof关键字的作用:1.判断一个对象是否实现了某个接口 2.判断一个实例对象是否属于某个类
用法:instanceof 关键字用来对比左边的对象是否属于右边的对象,都必须是引用类型不能是八种基础数据类型
返回值是 boolean 类型,如果左右两边比对成功,返回 true 否则返回 flase (null 类型和任何引用类型比较返回值都是flase)
演示:
package com.Staff;
public class Staff {
private String name;
private String sex;
private int age;
public String getName () {
return name;
}
public void setName (String name) {
this.name = name;
}
public int getAge () {
return age;
}
public void setAge (int age) {
this.age = age;
}
public String getSex () {
return sex;
}
public void setSex (String sex) {
this.sex = sex;
}
public Staff() {
}
public Staff(String name, String sex, int age) {
this.age = age;
this.sex = sex;
this.name = name;
}
public void show() {
System.out.println (age + "岁的" + sex + "性员工" + name);
}
}
package com.Test;
import com.Staff.Staff;
public class Test {
public static void main (String[] args) {
Object o = new Object ();
Staff pJW = new Staff ("pjw", "男", 18);
System.out.println (pJW instanceof Object );
}
}
结果: