码迷,mamicode.com
首页 > 其他好文 > 详细

抽象类和接口学习总结

时间:2015-10-06 22:01:03      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

        抽象类可以称为一个模板,定义以后所有该基类的子类的最基本特征,就像定义什么叫动物,什么叫植物,所以有些属性和方法是固有的,可以在抽象类中先定义好,就像之前学过的继承一样,把某些很有用的东西传承下去;但还有些东西是不能确定的,比如,这种动物吃什么等,都还是不能确定,但是这又是其固有的和方法,这时候我们可以用关键字 abstract 将其定义为抽象方法,等待它们的子类去实现,而其子类一定要实现这些抽象方法,不然不能被创建实例,依旧是属于抽象类。抽象类适用于很强的父子关系。

  •        抽象类可以没有抽象方法,但有抽象方法的类一定属于抽象类;
  •        抽象类中一旦定义了构造方法,实类必须显示覆盖它的构造方法,哪怕只是super();
  •        抽象类的抽象方法没有方法体,所以不能出现{}; 写法需如同:public abstract void eat();
  •        抽象类可以有变量和非抽象方法;

 

       接口不同于抽象类,接口没有很强的父子关系,更多只是用来描述某些类继承该接口后都会执行某种动作,如植物类和动物类都继承了一个进食接口,这只表明了植物和动物都具有相同的进食动作;

  •        接口内都是常量和抽象方法,默认修饰符为 public static finalpublic abstract ,可加可不加;
  •        接口可以继承别的接口,且可以为多个;
  •        只能继承单一类,但是可以继承多个接口;

 

       关于 java.lang.Cloneable 这一接口,其内部不实现任何方法,只是作为一个标识接口,继承这一接口的类可通过.clone()进行复制,二者是指向了不同的对象,但注意,当对这一对象内部的其中一个属性引用了一个对象,克隆这一动作也仅仅是复制了它的引用,并没有将内容进行复制,只能称这样的克隆动作为浅克隆,深克隆的实现可以自己重写.clone()方法;

       以下代码演示了深克隆与浅克隆:实现深克隆时需使复制内容中的所有对象都实现了 Serializable 接口,通过流来读取内容并保存到另一个对象中。

    

public class C implements Serializable{
     public int a = 1;
     public C(int ab){
         this.a = ab;
     }
}
public class entity implements Serializable,Cloneable{
 
    public C c = new C(1);
    
    public Object deepClone() throws IOException,ClassNotFoundException {

         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         ObjectOutputStream oos = new ObjectOutputStream(bos);
         oos.writeObject(this);
         //从流里读回来
         ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
         ObjectInputStream ois = new ObjectInputStream(bis);
         return ois.readObject();
     }

    public Object clone() {
        Object o = null;
        try {
            o = super.clone();
        } catch (CloneNotSupportedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return o;
    }
}
 1 public class entityText{
 2 
 3      public static void main(String[] args){
 4          entity e = new entity();
 5          try {
 6             entity e1 = (entity) e.clone();
 7             entity e2 = (entity) e.deepClone();
 8             e.c.a = 2;
 9             System.out.println(e1.c.a);
10             System.out.println(e2.c.a);
11         } catch (IOException e) {
12             // TODO Auto-generated catch block
13             e.printStackTrace();
14         } catch (ClassNotFoundException e) {
15             // TODO Auto-generated catch block
16             e.printStackTrace();
17         }
18          
19      }
20 }

 

抽象类和接口学习总结

标签:

原文地址:http://www.cnblogs.com/lhppom/p/4857702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!