java继承

一、继承

1.class:编程语言中的基本单位。将数据和功能封装到了一起。使用类来对同一类型的对象建模。

2.父类(superclass)包含其所有子类(subclass)共享的数据域和方法。即子类继承了父类的数据域和方法。同时子类也可以添加新的数据域和方法。

3.可以创建一个父类来表示系统中某些对象的核心概念,从父类中导出其他类型,来表示此核心可以被实现的各种不同方式。

4.父类的private成员子类不可访问。私有数据域可以通过父类的公共的访问器(getName())/修改器(setName())来访问和修改它们。

5.子类复制了父类的接口,所以所有可以发送给父类对象的消息同时也可以发送给子类对象。子类与父类具有相同的类型。

6.两种方法可以让父类与子类产生差异:

   1)直接在子类中添加新方法;

   2)改变现有父类的方法的行为--覆盖(overiding)基类的方法。

7.is-a与is-like-a:

 1)is-a:子类与父类具有完全相同的接口,即子类与父类是完全相同的类型。如:一个圆 is a 几何图形。判断是否是继承,就要确定是否可以用is-a来描述类之间的关系,并使之具有实际意义。

  2)is-like-a:子类中添加了新的接口元素,即扩展了接口,父类无法访问新添加的方法。此时导出类is like a 基类。

8.Java不允许多重继承。一个java类只可能直接继承自一个父类--单一继承(single inheritance)。多重继承可以通过接口实现。

二、super的作用

  1.调用父类的构造方法

    super()/super(parameters) 必须出现在子类构造方法的第一行,这是显式调用父类构造方法的唯一方式。因为在子类中调用父类构造方法的名字会引起一个语法错误。构造方法可以用来构造一个类的实例,不像属性和方法,父类的构造方法是不被子类继承的,它们只能从子类的构造方法中用super调用。

    注:构造方法链(constructor chaining):在任何情况下,构造一个类的实例时,将会调用沿着继承链的所有父类的构造方法。当构造一个子类的对象时,子类构造方法会在完成自己的任务之前,首先调用它的父类的构造方法。如果父类继承自其他类,那么父类构造方法又会在完成自己的任务之前,调用它的父类的构造方法。这个过程持续到沿着这个继承体系机构的最后一个构造方法被调用为止。

    public class Apple extends Fruit{}

    class Fruit{

      public Fruit(String name){

      ........

      }

    }

    Apple中没有显式定义的构造方法,因此Apple的默认无参构造方法被隐式调用。又Apple是Fruit的子类,是所以Apple的默认构造方法会自动调用Fruit的无参构造方法。而Fruit没有无参构造方法,因为Fruit显式地定义了构造方法。因此程序不能编译。最好能为每个类提供一个无参构造方法(如果需要),以便于对该类进行扩展同时避免错误。

  2.调用父类的方法

    super.方法名(参数)

    (父类方法被覆盖的情况下需用super调用父类方法,未被覆盖的情况下不需要加super因为父类的方法已经被子类继承了)

三、覆盖方法(method overriding)

  1.子类从父类中继承方法,有时,子类需用修改父类中定义的方法的实现,这称作方法覆盖。

  2.super.super.....方法名()是一个语法错误,只能super.方法名()

  3.仅当实例方法是可访问时,它才能被覆盖。父类的私有方法不能被覆盖。如果子类中定义的方法和父类中的私有方法同名,那么这两个方法完全没关系。

  4.静态方法可以被继承但是不可以被覆盖。如果父类中的静态方法被子类重写定义,那么定义在父类中的静态方法将被隐藏,可用父类名.静态方法调用隐藏的静态方法。

四、对象类Object

  1.Java中的每个类都源于java.lang.Object类。熟悉Object类提供的方法很重要。这样就可以在自己的类中使用它们。

  2.toString()方法:返回所属类名@该对象十六进制形式的内存地址

  3.equals()方法:使用==检测两个引用变量是否指向同一个对象。覆盖equals方法的格式固定为equals(Object obj)

五、多态(polymorphism)

  1.使用父类对象的地方都可以使用子类的对象,这就是多态。多态意味着父类型的变量可以引用子类型的对象。

六、动态绑定

  1.动态绑定工作机制:假设对象o是类C1,C2,...,Cn-1,Cn的实例。其中C1是C2的子类,...Cn-1是Cn的子类。如果o调用一个方法p,那么java虚拟机会依次在类C1,C2...Cn中查找方法p的实现,知道找到为止。一旦找到一个实现就停止查找然后调用这个第一次找到的实现。

七、final

  使用final修饰符表明一个类是终极的,是不能作为父类的。使用final修饰的方法是不能被子类覆盖的。使用final修饰的方法内的变量就是常量。

你可能感兴趣的:(java,jvm,spring)