1.子类

class SonClass extends ABC{...}

在子类定义后,子类中就可以直接隐式包含父类的成员变量和方法,而不用再写,这就是使用继承的优点。

子类包含父类的成员,不是子类和父类共享成员,而是子类和父类中都能各自开辟空间,产生性质相同但又独立的成员变量和方法。

1.1子类的构造方法

Java中,在子类创造对象时会执行子类的构造方法,因为子类继承自父类,所以在子类构造方法之前必须先执行父类的构造方法。

eg:

Public class Example{

  public static void main(String[] args){

    SonClass sc = new SonClass();

  }

}

class SuperClass{

  SuperClass(){

    System.out.print("Supper");

  }

}

class SonClass extends SuperClass{

  SonClass(){

    System.out.print("SubClass");

  }

}

output:

Supper

SubClass

子类中构造方法是隐式调用父类构造方法。在程序中也可以显式调用父类构造方法。显示调用父类的构造方法是通过语句super()来完成。如果要调用父类的有参构造方法,则在super()的圆括号中加入所需的参数。

当在子类的构造方法中通过super()来调用父类的构造方法时,如果父类构造方法不带参数,则这样的显示调用可以省略,这种调用是由Java自动进行的。但是,如果父类中只有一个或多个有参构造方法,则程序找不到默认无参方法,默认调用会导致编译出错,必须显式调用

eg:

Public class Example{

  public static void main(String[] args){

    SonClass sc = new SonClass();

  }

}

class SuperClass{

  SuperClass(int a, int b){

    System.out.print(a+b);

  }

}

class SonClass extends SuperClass{

  SonClass(){

    System.out.print("SubClass");

  }

}

应将程序修改为:

class SonClass extends SuperClass{

  SonClass(){

    super(1, 2);

    System.out.print("SubClass");

  }

}

2.多态

2.1隐藏

隐藏发生在子类与父类的成员变量发生冲突时。当子类中的成员变量与父类成员变量同名时,子类就会把父类的变量隐藏起来,这时该变量默认为子类的成员变量。如需强制使用父类成员变量,可以使用super关键字,如super.i等。

eg:

public class Example{

  public static void main(String[] args){

    SonClass sc = new SonClass();

    System.out.println(sc.k);    //子类本身定义的k

  }

}

class SuperClass{

  int k = 3;

}

class SonClass extends SuperClass{

  int k = super.k * 2;        //子类隐藏父类的成员k,调用时需要用super

}

 2.2重载与覆盖

当子类中有2个out方法,一个继承自父类,一个由自己创建。两个方法的参数不同,这种情况就属于重载

eg:

public class Example{

  public static void main(String[] args){

    SonClass sc = new SonClass();

    sc.out();

    sc.out(3);

  }

}

class SuperClass{

  public void out(){

    System.out.print("SupperClass");

  }

}

class SonClass extends SuperClass{

  public void out(int i){

    System.out.print("SupperClass" + i);

  }

}

当子类中的成员方法与父类中的成员方法同名同参数时,出现覆盖,子类中的成员方法会屏蔽继承自父类的成员方法

eg:

public class Example{

  public static void main(String[] args){

    SonClass sc = new SonClass();

    sc.out();        //调用子类本身的方法,而不是父类的out 方法

  }

}

class SuperClass{

  public void out(){

    System.out.print("SupperClass");

  }

}

class SonClass extends SuperClass{

  public void out(){

    System.out.print("SonClass");

  }

}

构造方法不能被覆盖,也不能继承。父类构造方法必须在子类构造方法中调用。如果想强制使用父类的构造方法,可以使用super 关键字。

若程序在需要显式调用父类构造方法二使用super()语句时,super()必须是构造方法中定义的第一条语句;若没有,则系统调用默认的super()语句。

eg:

public class Example{

  public static void main(String[] args){

    SonClass sc = new SonClass();

  }

}

class SuperClass{

  SuperClass(int i){

    System.out.print("SupperClass");

  }

}

class SonClass extends SuperClass{

  SonClass(){

    super(1);

    System.out.print("SonClass");

  }

}

3.抽象类

abstract 所修饰的类为抽象类。抽象类是只有定义而无法实现对象的类。抽象类无法产生对象。

abstract 所修饰的方法为抽象方法。抽象方法在形式上仅有方法的方法头部分,而没有方法体,方法头后面有分号,例如:

abstract void();

抽象类中可以没有抽象方法,但抽象方法所在的类必须是抽象类

在写大型程序时,一般先设计最顶层、最抽象的类和方法,然后逐步实现细节化的类和方法。这种设计方法由粗到细,容易分析和理解

 4.接口

我们在分析问题时,往往遇到有的类既要继承自一个父类,又需要继承自另一个父类。而Java不允许多重继承。为此,Java 中定义了一种特殊类型的类,称之为接口。接口实质上是一种特殊的抽象类。接口中的常量默认为public static final 类型

interface 接口名{

  //类体:只能由静态常量或抽象方法组成

}

eg:

interface infa{

  double PI = 3.14;

  abstract void out();

}

子接口继承父接口是通过关键字extends 来声明的,

eg:

interface 子接口 extends 父接口1,父接口2,...

在Java 中,要让接口发挥其功能,需定义一个子类,实现并覆盖掉接口中的所有抽象方法,这称之为接口的实现。实现接口是通过关键字 implements 来声明的

eg:

class SonClass implements infa{

  public void out(){

    System.out.print(PI);

  }

}

[Java] 继承,隐藏,覆盖,重载,多态,抽象类,接口的更多相关文章

  1. Java中关于继承、类、多态、接口的知识点

    继承 含义:在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类 优点:1)代码的重用性:2)子类扩展父类的属性和方法:3)父类的属性和方法可用于子类:4)设计应用程序 ...

  2. 【Java基础】【09面向对象_多态&抽象类&接口】

    09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案 ...

  3. java基础三 [深入多态,接口和多态](阅读Head First Java记录)

    抽象类和抽象方法 1.抽象类的声明方法,在前面加上抽象类的关键词abstract abstract class canine extends animal{      public void roam ...

  4. 06 面向对象:多态&抽象类&接口&权限修饰符&内部类

    多态: /* 多态(polymorphic)概述 * 事物存在的多种形态 多态前提 * a:要有继承关系. * b:要有方法重写. * c:要有父类引用指向子类对象. * 成员变量 * 编译看左边(父 ...

  5. Java 继承Thread类和实现Runnable接口的区别

    ava中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 在实际应用中,我 ...

  6. 六、java基础-单例模式_继承_覆盖_多态

    1.单例模式: 1)提出原因 是由gof 也就是四人组提出来的.为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销.因为外面程序可以通过new的方法直接调用类里面的构造方法 ...

  7. JAVA基础知识总结7(抽象类 | 接口)

    抽象类: abstract 1.抽象:不具体,看不明白.抽象类表象体现. 2.在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abs ...

  8. Java 继承(extends)、抽象类(abstract)的特点用法原理(7)

    Java  中的继承 继承: java中的抽象类用法原理: /* 当多个类中出现相同功能,但是功能主体不同, 这是可以进行向上抽取.这时,只抽取功能定义,而不抽取功能主体. 抽象:看不懂. 抽象类的特 ...

  9. PHP中多态,抽象类,接口,

    小例子: 需求:公司定义一个接口让我们开发功能 usb.interface.php: <?php interface USB{ public function run(); } store.cl ...

  10. java继承方法覆盖

    public class TestB { private void f() { System.out.println("TestB"); } public static void ...

随机推荐

  1. js Math [ 随机数、绝对值、四舍五入、进一取整、舍去取整、最大值、最小值、圆周率 ]

    <script> /* 数学对象:Math */ with (document) { write('<br>-3.5的绝对值:'+Math.abs(-3.5)); write( ...

  2. PAT (Advanced Level) 1087. All Roads Lead to Rome (30)

    暴力DFS. #include<cstdio> #include<cstring> #include<cmath> #include<vector> # ...

  3. Java对象的死亡

    在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象). 一,引用计数算法 给 ...

  4. 【Java TCP/IP Socket】基于线程池的TCP服务器(含代码)

    了解线程池 在http://blog.csdn.net/ns_code/article/details/14105457(读书笔记一:TCP Socket)这篇博文中,服务器端采用的实现方式是:一个客 ...

  5. websocket笔记

    本文为原创,转载请注明出处: cnzt       文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6742746.html websocket -- 双向通信网 ...

  6. 【postman】安装使用说明

    1.下载 下载地址:https://pan.baidu.com/s/1miyYjig?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=& ...

  7. BUPT复试专题—最近公共祖先(2014软院)

    题目描述 给出一棵有N个节点的有根树TREE(根的编号为1),对于每组查询,请输出树上节点u和v的最近公共祖先. 最近公共祖先:对于有向树TREE的两个结点u,v.最近公共祖先LCA(TREE u,v ...

  8. ubuntu 14.04安装nodejs

    http://stackoverflow.com/questions/32902699/cannot-install-ember-on-ubuntu-1404/33495134

  9. People seldom do what they believe in. They do what is convenient, then repent.

    People seldom do what they believe in. They do what is convenient, then repent. 人们很少真正实践他们的理想.他们只做比较 ...

  10. 出现异常时直接把e输出比输出e.getMessage()好得多

    之前研究态度不好,出异常时处理草草了事,今天出现问题才觉得该认真对待每个分支.