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 }
原文地址:https://www.cnblogs.com/yiliweichinasoft/p/3556700.html