1:接口 interface
interface 接口名称{}
接口中的成员修饰符是固定的。
成员常量:public static final
成员函数:public abstract
这些修饰符即使不写,系统也会自动加上,建议写上,因为可以提高程序的阅读性。
接口里面的方法默认都是public的,所以子类在实现的时候必须要使用public
接口实现类的命名,一般在最后面都是以impl结尾,表示是一个实现类的意思
特点:
接口中的方法全部都是抽象方法,
相当于是抽象类的一个特殊体现形式
特性:
类只能单继承
class A extends B//只支持这种格式
接口可以多实现
class A implements B,C,D//支持实现多个接口 BCD 都是接口
抽象类(普通类)里面一般定义什么东西?
都是一些事物共性的属性或行为
接口里面一般定义什么呢?
一把定义一些扩展的东西
class A extends AbstractDemo implements Inter,Inter2{
}
继承和实现的区别?
继承:extends
一个类继承一个抽象类,因为抽象类中可以存在非抽象方法,所以子类可以把父类中的非抽象方法直接继承过来使用。
实现:implements
因为接口中全部都是抽象方法,这些方法全部都需要进行实现,所以说一个类需要实现一个接口。
多继承的特性(了解)
interface A{}
interface B{}
interface C extends A,B{}//正确的 接口之间可以多继承
class A1{}
class B1{}
class C1 extends A1,B1{}//错误的,java中的类不支持多继承
2:面向对象的第三大特征:多态
总结
体现:父类引用或者接口引用指向子类对象
Animal a = new Cat();//animal是cat的父类
Inter i = new InterImpl();//interimpl是inter接口的实现类
作用:多态的存在提高了程序的扩展性和后期可维护性
前提:类与类之间需要存在继承或者实现关系,要有覆盖操作
弊端:只能调用父类或者接口中已经定义的功能,在执行的时候会执行对应子类或者实现类中的功能。
多态中判断类型的关键字instanceof
对象的引用 instanceof 类型 用于判断该对象是否所属于该类型
多态的类型转换
父类引用指向子类对象,如果还想使用子类的特有方法,这个时候就需要进行强制类型转换了。
3:多态中成员的特点
成员变量
编译的时候,看等号左边
执行的时候,看等号左边
非静态成员函数
编译的时候:看等号左边
执行的时候:看等号右边
静态函数
编译的时候,看等号左边
执行的时候,看等号左边
总结:
成员变量和静态函数:编译和执行都看等号左边
非静态成员函数编译看左边,执行看右边
3:设计模式
静态工厂设计模式
对外提供一个获取对象的静态方法,根据用户传递的不同参数,返回不同的对象。
要保证返回的不同对象都是属于同一个父类或者接口的。
//这个其实是一个设计模式,静态工厂设计模式
class Tools
{
public static SqlTools getInstance(String name){
if(name.equals("mysql")){
return new MysqlTools(); //SqlTools st = new MysqlTools();
}else{
return new OracleTools();
}
}
}
模板设计模式
相当于提供一个功能模板,使用这个模板来实现某个功能非常简单。
在这是把功能的主要计算逻辑进行提取。把一些可能发生变化的需求抽象为一个函数。
这样后期写一个子类来继承这个父类,实现里面的未实现的方法即可。
//模板设计模式
abstract class TempleteGetTime
{
//包含计算时间的代码和具体的业务代码
public final void getTime(){
long start_time= System.currentTimeMillis();
code();
long end_time= System.currentTimeMillis();
System.out.println(end_time-start_time);
}
public abstract void code();
}
class App1 extends TempleteGetTime
{
public void code(){
System.out.println("hello");
}
}