美文网首页Android知识
泛型 抽象类 接口 继承 总有你想知道的 ~~学渣系列

泛型 抽象类 接口 继承 总有你想知道的 ~~学渣系列

作者: 品味与回味 | 来源:发表于2017-12-01 14:51 被阅读107次

    首先先来说说泛型

    public interface IProfile<T> extends IIdentifyable<T> 
    public interface Tagable<T> {
    AbstractDrawerItem<T, VH extends RecyclerView.ViewHolder> implements IDrawerItem<T, VH>, Selectable<T>, Tagable<T> {
    
    image.png

    看到这些迷糊没。这些都是泛型
    当然<> 里面的
    知识点
    Java泛型中的标记符含义:
    E - Element (在集合中使用,因为集合中存放的是元素)
    T - Type(Java 类)
    K - Key(键)
    V - Value(值)
    N - Number(数值类型)
    ? - 表示不确定的java类型
    S、U、V - 2nd、3rd、4th types

    Object跟这些标记符代表的java类型有啥区别呢?
    Object是所有类的根类,任何类的对象都可以设置给该Object引用变量,使用的时候可能需要类型强制转换,但是用使用了泛型T、E等这些标识符后,在实际用之前类型就已经确定了,不需要再进行类型强制转换。

    说白了 泛型就是给你的对象一个限制条件,当你调用这个对象的时候 你需要给这个调用对象一个限制。

    public interface A<T> {
        void a();
        T B();
    }
    
    public abstract class B<T>  implements  A<T>{
        @Override
        public void a() {
    
        }
    
        @Override
        public T B() {
            return null;
        }
    }
    
    public class c extends B  implements  A{
    
    }
    
    

    先来给新手一点小的需要注意的地方。 在你写抽象类的时候 B的这个泛型是一个要给的<T> 要不编译不过去。这个是因为你的接口A中泛型不知道去哪里寻找你给B一个泛型,他就可以找到。或者还可以在写B的时候你直接就给A一个固定的比如
    implements A<String> 也是可以的

    另外小知识点
    B是一个抽象类 大家注意听


    image.png

    抽闲类B中实现接口中的方法。那么C中调用了接口A也是不用实现具体方法的。 因为在父类B中已经调用了A的方法。

    另外再说几个知识点
    抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
      下面要注意一个问题:在《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,但是后面发现如果一个类不包含抽象方法,只是用abstract修饰的话也是抽象类。也就是说抽象类不一定必须含有抽象方法。但是正常人不会那么去写

    抽象类和接口 是不能实例化的,这个大家都清楚。实现接口就要实现全部方法。继承抽象类就是实现抽象方法。他的存在就是为了别人去继承。抽象类本身就是大部分就是继承别的类。这个其实就是多继承。因为继承只能一次。所以这种情况抽象类在继承别的类。在继承抽象类就相当于继承多个类。

    1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
    
      2)抽象类不能用来创建对象;
    
      3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
    
      在其他方面,抽象类和普通的类并没有区别。
    
    

    抽象类和接口的区别和作用
    1.语法层面上的区别

    1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

    2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

    3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

    4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    作用?
    为什么会出现这个两种
    抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

    具体例子 人和动物
    interface 行为{
    public abstract void 吃饭();
    public abstract void 睡觉();
    }
    这就是接口、“”有没有“” 关系。 人和动物都有行为这接口的行为。实现接口后去实现个子的方法

    abstract class 人{
    public abstract void 走();
    public abstract void 跑();
    }

    后续出现的男人女人等 是不是 人, 他是一个 “”是不是的关系“”,是的话就去继承

    所以大家稍微有点影响了吧、 接口和抽象类的大致区别
    一个是有没有公共的行为(接口)
    是不是同一个对象(抽象类)

    下面转圈圈


    image.png

    还是上面的几个类哦~~~

    public class c extends B<String>  implements  A<String>{
    
    这个不报错
    
    }
    
    ~~~~~~~~~~~~~~~~~~~~~
    public class c extends B  implements  A{
    这个不报错
    
    }
    
    ~~~~~~~~~~~~~~~~~~~~~
    public class c extends B<>  implements  A<c>{
    这个报错
    
    }
    ~~~~~~~~~~~~~~~~~~~~~
    public class c extends B<c>  implements  A{
    这个报错
    
    }
    ~~~~~~~~~~~~~~~~~~~~~
    
    public class c extends B<c>  implements  A<c> {
    这个不报错
    为什么?
    
    }
    
    
    
    public abstract class B<T>  implements  A<T>{
        @Override
        public void a() {
    
        }
    
        @Override
        public T B() {
            return null;
        }
    }
    因为在抽象类B 中你的定义 AB 是要一样的  在c中不一样。 那是肯定会报错的。
    
    
    哦对了。当一个类实现的接口中父类也实现的话。那么在子类或者父类中实现一次就好
    

    相关文章

      网友评论

        本文标题:泛型 抽象类 接口 继承 总有你想知道的 ~~学渣系列

        本文链接:https://www.haomeiwen.com/subject/gatwbxtx.html