一、接口
概念:
通过interface关键字修饰的java元素就是接口。
格式:
public interface 接口名{}
interface 接口名{}
例子:
public interface InterfaceTest {
}
interface InterfaceTest1{ //缺省修饰符
}
1) 为什么要有接口
为了克服java的单继承,接口可以多实现
例如:
收费,出租车有收费功能【1元/公里】,
飞机有收费功能【全程1000元】
出租车与飞机不是同一类事物,但是具有相同的功能。
总结
接口实际上就是提供不同类型事物的公共内容,由接口的子类根据自身的实际情况,来实现这个接口提供的公共内容。这样子类就不需要创建这个公共内容,只需要继承来重写一下就好。
2)接口中的元素
接口中可以有常量、静态方法、抽象方法。
1、接口中变量一定是 public static final修饰的静态常量。
2、接口中的静态方法一定是public修饰的,public可以被省略。[jdk1.8]
3、接口中的抽象方法一定是public abstract修饰的,public abstract可以省略。
例子:
public interface InterfaceTest {
//静态常量
public static final String name = "我是一个接口";
//静态方法
public static void fn(){
System.out.println("我是一个接口静态方法");
}
//抽象方法
public abstract void methods();
}
3)接口的用法
1.接口不能new,如果需要访问抽象方法需要借助接口子类。
2.类可以通过implements关键字去实现一个/多个接口。
3.普通的类去实现一个/多个接口,就需要将每一个接口中的抽象方法重写,否则就需要将这个普通的类改成抽象类。(同抽象方法一样)
4.抽象类去实现一个/多个接口,不需要重写接口中的抽象方法。
5.接口可以继承接口,并且可以继承父接口中的所有元素。
public interface Hockey extends Sports, Event
6.利用接口回调对象创建出接口对象。
(和抽象方法中的向上转型基本一样)
7.当某一个普通的java类中的方法参数是接口类型的时候,可以传递接口回调对象,也可以是接口的子类对象。
例子(2)(3)(4)
public class InterfaceTestDemo implements InterfaceTest,InterfaceTest1{
@Override
public void methods1() {
// InterfaceTest1接口中的抽象方法
System.out.println("interfactTest1中的抽象方法的重写");
}
@Override
public void methods() {
// TODO Auto-generated method stub
System.out.println("interfactTest中的抽象方法的重写");
}
}
// TODO 借口1
interface InterfaceTest {
//静态常量
public static final String name = "我是一个接口";
//静态方法
public static void fn(){
System.out.println("我是一个接口静态方法");
}
//抽象方法
public abstract void methods();
}
// TODO 借口2
interface InterfaceTest1{
public abstract void methods1();
}
4) 接口回调对象
接口回调对象与上转型对象很相似
接口回调对象接口的子类对象赋值给接口变量
1.接口回调对象只能访问接口的抽象方法,实际上访问子类重写以后的抽象方法
2.接口回调对象不能访问子类本身的方法,如果要访问就需要强制类型转换
格式:
接口类名 变量 = new 子类();
子类必须是当前接口实现的子类。
抽象类与接口的区别?
特点 | 抽象类 | 接口类 |
声明不同 | abstract | interface |
可以说继承的个数 | extends 1个 | Implments 1个/多个 |
意义不一样 | 同类型事务的公共功能 | 不同类型事务的公共功能 |
二、关键字:static-this-super-final
1.static静态修饰符
1)被static修饰的变量是静态成员变量,可以类名访问,也可以对象进行访问。(建议类名)
2)被static修饰的方法是静态方法,可以被类名访问,也可以通过对象访问(建议类名)
3)同一个类中静态方法不能访问实例元素,this不能出现
4)被static修饰的变量和方法,会在类的创建过程中一同创建,并且的它的数据子在同一类对象中是共享。它的声明周期比实例方法,实例属性的声明周期长。
2 this 当前类对象
出现在那个类中就是表示那个类的对象
在当前类中的构造方法/实例方法中访问当前类中的变量和方法,可以省略。
在当前类中的构造方法/实例方法中访问被隐藏的成员变量时不能省略。
3.super 父类的对象
1)出现在子类的构造函数中的第一句,super() :父类无参的构造方法。Super(参数):表示有参数的构造方法。
2) 出现在子类中的实例方法是,表示访问弗雷德变量、方法。
访问被隐藏的父类表量,super.变量,此时这个super表示父类的对象。
一般访问没有重写之前的父类方法,super.方法([参数]),此时这个super表示父类对象。
4.final 终极修饰符
1.被fianl修饰的类,不能被继承,没有子类
2.被fianl修饰的变量,就是常量,不能被重新赋值
3.被fianl修饰的方法,不能被重写。
例子:
class Finaltest extends FinalMethods{ public void mf (){ super.finalmethods(); } }
无奈源于不够强大