抽象类和接口学习总结

抽象类可以称为一个模板,定义以后所有该基类的子类的最基本特征,就像定义什么叫动物,什么叫植物,所以有些属性和方法是固有的,可以在抽象类中先定义好,就像之前学过的继承一样,把某些很有用的东西传承下去;但还有些东西是不能确定的,比如,这种动物吃什么等,都还是不能确定,但是这又是其固有的和方法,这时候我们可以用关键字 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 }
时间: 2024-10-23 23:08:13

抽象类和接口学习总结的相关文章

抽象类和接口学习区别

最近复习了一些Java的基础知识,这里总结一下抽象类和接口的区别. 1. abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系.但是,一个类却可以实现多个interface. 2. 在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abst

抽象类与接口学习小结

抽象类:在某些类中某些功能不能定义具体的行为功能,这种功能称之为抽象功能,含有抽象功能的类,就称为抽象类. 抽象类的特点:抽象类和抽象方法必须用abstract关键字修饰 抽象类的格式:   abstract class类名{} 抽象方法的格式:  public abstract void 方法() 抽象类不一定含有抽象方法,有抽象方法的类一定是抽象类. 抽象类不能实例化,因为该类不是具体的实现类. 抽象类需要按照多态的形式,由具体的子类实例化. 抽象类的子类要么是抽象类,要么必须重写并实现抽象

抽象类和接口学习小结

区别:1.本质区别是抽象类描述这个类是什么,而接口则是描述这个类可以做什么功能.2.接口的方法都是publice3.抽象类被继承时,子类要实现父类所有抽象方法,要overwrite关键字4.抽象类可以包含字段和普通方法5.继承时,基类只能有一个,接口可以有多个 共同点:1.继承抽象类和抽象类时,都要实现他们所有的方法2.它们都不可以被实例化 抽象方法.虚方法.普通方法1.继承抽象类时,如果要使用父类中的普通方法,加一个new关键字隐藏(如:public new void Add)2.虚方法和普通

抽象类与接口学习总结

当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现方式是无法确定的.所以在出c#中允许在定义方法时不写方法体,不包含方法体的方法称为抽象方法,它被abstract修饰符标记.包含抽象方法的类要声明为抽象类,但抽象类可以不包含抽象方法,抽象类不可以被实例化.如果想调用抽象类中的方法,需要创建一个子类,在子类中实现抽象方法.任何派生自抽象类的类必须使用override关键字实现该类所有的抽象成员,除非派生类自己也是抽象类.如果一个抽象类中的所有方法都是抽象的,则可以将这个

大龙的学习笔记之“虚方法,抽象方法,重写,抽象类,接口”

虚方法:可以重写,也可以不重写,英文名:virtual 抽象方法:必须重写,必须放在抽象类中,英文名:abstract 重写:可以重写三种方法:virtual,abstract,override,英文名:override 抽象类:可以有抽象方法,也可以有非抽象方法,英文名:abstract 接口:和抽象类相似,但是里面只有未实现的方法,英文名:interface 大龙的学习笔记之"虚方法,抽象方法,重写,抽象类,接口",布布扣,bubuko.com

Java基础__慕课网学习(24):深入理解抽象类与接口(转)

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为:

C++语言学习(十五)——C++抽象类与接口

C++语言学习(十五)--C++抽象类与接口 一.抽象类与接口 1.抽象类简介 面向对象的抽象类用于表示现实世界的抽象概念,是一种只能定义类型,不能产生对象的类(不能实例化),只能被继承并被重写相关函数,直接特征是相关函数没有完整实现.C++语言没有抽象类的概念,通过纯虚函数实现抽象类.纯虚函数是指定义原型的成员函数,C++中类如果存在纯虚函数就成为了抽象类.抽象类只能用作父类被继承,子类必须实现父类纯虚函数的具体功能,如果子类没实现纯虚函数,子类也为抽象类.抽象类不可以定义对象,但是可以定义指

Java基础学习191221(可变参数,数组,Array类,稀疏数组,继承重写多态,抽象类,接口)

Java基础学习 可变参数 在方法声明中,在指定参数类型后加一个省略号(...). 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数.任何普通参数都必须在它之前声明. public class printMax { public static void main(String[] args) { printMax(1,5,8,78,415,15); } public static void printMax( double... numbers){ if (numbers.length

JAVA学习经验--总结JAVA抽象类和接口

* --总结JAVA抽象类和接口  * 1.抽象类:  *             1>抽象类可以修饰方法,修饰类,但不能修饰属性,不能被实例化  *             2>抽象类可以被继承,只能是单继承,继承抽象类必须实现抽象方法  *             3>抽象类不能被static ,fina,private一起修饰  *             4>抽象类是有多态性的  *  * 2.接口:  *             1>接口是一种特殊的抽象类,不能被实