hadoop学习序曲之java基础篇--java接口 多态

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");
      
    }
}

你可能感兴趣的:(hadoop学习序曲之java基础篇--java接口 多态)