• java基础知识(一)


    1.请问下面的实现可以吗?

    1 public interface A{}
    2 public interface B{}
    3 public class C implements A, B{}
    4 A a = new C();  
    5 B b = (B) a;

    答案是可以的,一个类实现了多个接口,该类的实例的类型可以在实现的接口之间转化。是通过接口实现多态的一种表现。

    2.序列化应用场景举例

       概念:序列化

       java对象需要序列化到本地硬盘或者需要在网络中传输时需要将java对象进行实例化操作,被实例化的类需要实现serializable接口。该接口没有需要被实现的方法。

    需要被实例化的类实现serializable接口只是说明该类可以被实例化。

       从网络中接受到的实例化后的java对象需要进行反实例化操作从而得到java对象,方可进行后续操作

       举例建设中...

    3.泛型

      使用泛型最大的作用是 数据的使用更加安全,可以将变量类型错误在编译阶段给暴露出来。

      子概念:通配符

      泛型进行引用传递时类型必须是一致的

     1 class Info<T>
     2 {
     3     private T str;
     4     
     5    public void setStr(T str)
     6     {
     7         this.str = str;
     8     }
     9 
    10    public T getStr()
    11   {
    12        return this.str;
    13    }
    14 }
    15 
    16 public class GenericDemo
    17 {
    18      public static void main(Strings[] arg)
    19      {
    20          Info<String> info = new Info<String>();
    21          info.setStr("java");
    22          fun(info);                                           //引用的传递
    23      }
    24 
    25      public static void  fun(Info<Oject> temp)
    26      {
    27            System.out.println("temp: " + temp);
    28      }
    29 }

     上述代码会报错;
     

       解决方案1.修改fun()方法的声明,不加任何修饰符(该方案不是很妥当,之前已经声明过类型)

       public static void fun(Info temp){}

       解决方案2.修改fun()方法的声明,将类型改变为 "?"

       public static void fun(Info<?> temp){}

       在方案2中,

       将

       Info<String> info = new Info<String>();
       info.setStr("java");
       改为

       Info<?> info = new Info<String>();
       info.setStr("java");


       java虚拟机在编译时会报错,"?"为通配符,并不指定具体类型

       所以,使用 "?" 时只能作为接收时类型的指定。

       泛型与子类继承的关系

       一个类的子类可以通过对象的多态性为其父类实例化,但是在泛型操作中,泛型的子类是无法通过父类的泛型进行接收的。例如

    1 Info<String> info1 = new Info<String>();
    2 Info<String> info2 = null;
    3 
    4 info2 = info1;

       这样操作时不允许的。

       受限泛型: 关键字 extend  super

     4、泛型接口

    1   public interface Info<T>{
    2 
    3          public  T getInfo();
    4 
    5    }

         泛型接口的两种实现方式:

         a.在子类的定义上也声明泛型

     1 interface Info<T>
     2 {
     3     public T getVar();
     4 }
     5 
     6 public class InfoImpl<T> implements Info<T>
     7 {
     8     public T var;
     9     public InfoImpl(T var)      //通过构造方法设置属性
    10     {
    11             this.setVar(var);
    12     }
    13 
    14     public void setVar(var)
    15     {
    16             this.var = var;
    17     }
    18 
    19     public T getVar()
    20     {
    21            return var;
    22     }
    23 
    24     public static void main(String agrs[])
    25     {
    26            Info<String> info = null;               //声明接口对象
    27            info = new InfoImpl<String>("java");    //通过子类实例化对象
    28 
    29            System.out.prinln(info.getVar());
    30     }
    31 
    32 
    33 }


        b.在实现接口的时候具体制定类型即可

     1 interface Info<T>
     2 {
     3     public T getVar();
     4 }
     5 
     6 public class InfoImpl<T> implements Info<String>
     7 {
     8     public String var;
     9     public InfoImpl(String var)      //通过构造方法设置属性
    10     {
    11             this.setVar(var);
    12     }
    13 
    14     public void setVar(var)
    15     {
    16             this.var = var;
    17     }
    18 
    19     public String getVar()
    20     {
    21            return var;
    22     }
    23 
    24     public static void main(String agrs[])
    25     {
    26            info = new InfoImpl(java"); 
    27 
    28            System.out.prinln(info.getVar());
    29     }
    30 
    31 
    32 }
  • 相关阅读:
    ssh
    datetime
    网络-sdn(2)
    django-drf
    Vscode前段常用插件
    Vscode离线安装插件
    CSS 实现绘制各种三角形
    flex布局
    js实现全选和取消全选
    购物车用Ajax向后台传参
  • 原文地址:https://www.cnblogs.com/yiliweichinasoft/p/3556700.html
Copyright © 2020-2023  润新知