1.子类

class SonClass extends ABC{...}

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

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

1.1子类的构造方法

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

eg:

  1. Public class Example{
  2.  
  3.   public static void main(String[] args){
  4.  
  5.     SonClass sc = new SonClass();
  6.  
  7.   }
  8.  
  9. }
  10.  
  11. class SuperClass{
  12.  
  13.   SuperClass(){
  14.  
  15.     System.out.print("Supper");
  16.  
  17.   }
  18.  
  19. }
  20.  
  21. class SonClass extends SuperClass{
  22.  
  23.   SonClass(){
  24.  
  25.     System.out.print("SubClass");
  26.  
  27.   }
  28.  
  29. }

output:

Supper

SubClass

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

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

eg:

  1. Public class Example{
  2.  
  3.   public static void main(String[] args){
  4.  
  5.     SonClass sc = new SonClass();
  6.  
  7.   }
  8.  
  9. }
  10.  
  11. class SuperClass{
  12.  
  13.   SuperClass(int a, int b){
  14.  
  15.     System.out.print(a+b);
  16.  
  17.   }
  18.  
  19. }
  20.  
  21. class SonClass extends SuperClass{
  22.  
  23.   SonClass(){
  24.  
  25.     System.out.print("SubClass");
  26.  
  27.   }
  28.  
  29. }

应将程序修改为:

  1. class SonClass extends SuperClass{
  2.  
  3.   SonClass(){
  4.  
  5.     super(1, 2);
  6.  
  7.     System.out.print("SubClass");
  8.  
  9.   }
  10.  
  11. }

2.多态

2.1隐藏

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

eg:

  1. public class Example{
  2.  
  3.   public static void main(String[] args){
  4.  
  5.     SonClass sc = new SonClass();
  6.  
  7.     System.out.println(sc.k);    //子类本身定义的k
  8.  
  9.   }
  10.  
  11. }
  12.  
  13. class SuperClass{
  14.  
  15.   int k = 3;
  16.  
  17. }
  18.  
  19. class SonClass extends SuperClass{
  20.  
  21.   int k = super.k * 2;        //子类隐藏父类的成员k,调用时需要用super
  22.  
  23. }

 2.2重载与覆盖

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

eg:

  1. public class Example{
  2.  
  3.   public static void main(String[] args){
  4.  
  5.     SonClass sc = new SonClass();
  6.  
  7.     sc.out();
  8.  
  9.     sc.out(3);
  10.  
  11.   }
  12.  
  13. }
  14.  
  15. class SuperClass{
  16.  
  17.   public void out(){
  18.  
  19.     System.out.print("SupperClass");
  20.  
  21.   }
  22.  
  23. }
  24.  
  25. class SonClass extends SuperClass{
  26.  
  27.   public void out(int i){
  28.  
  29.     System.out.print("SupperClass" + i);
  30.  
  31.   }
  32.  
  33. }

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

eg:

  1. public class Example{
  2.  
  3.   public static void main(String[] args){
  4.  
  5.     SonClass sc = new SonClass();
  6.  
  7.     sc.out();        //调用子类本身的方法,而不是父类的out 方法
  8.  
  9.   }
  10.  
  11. }
  12.  
  13. class SuperClass{
  14.  
  15.   public void out(){
  16.  
  17.     System.out.print("SupperClass");
  18.  
  19.   }
  20.  
  21. }
  22.  
  23. class SonClass extends SuperClass{
  24.  
  25.   public void out(){
  26.  
  27.     System.out.print("SonClass");
  28.  
  29.   }
  30.  
  31. }

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

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

eg:

  1. public class Example{
  2.  
  3.   public static void main(String[] args){
  4.  
  5.     SonClass sc = new SonClass();
  6.  
  7.   }
  8.  
  9. }
  10.  
  11. class SuperClass{
  12.  
  13.   SuperClass(int i){
  14.  
  15.     System.out.print("SupperClass");
  16.  
  17.   }
  18.  
  19. }
  20.  
  21. class SonClass extends SuperClass{
  22.  
  23.   SonClass(){
  24.  
  25.     super(1);
  26.  
  27.     System.out.print("SonClass");
  28.  
  29.   }
  30.  
  31. }

3.抽象类

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

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

abstract void();

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

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

 4.接口

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

interface 接口名{

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

}

eg:

  1. interface infa{
  2.  
  3.   double PI = 3.14;
  4.  
  5.   abstract void out();
  6.  
  7. }

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

eg:

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

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

eg:

  1. class SonClass implements infa{
  2.  
  3.   public void out(){
  4.  
  5.     System.out.print(PI);
  6.  
  7.   }
  8.  
  9. }

[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. (45)C#网络3 socket

    一.TCP传输 using System.Net.Sockets; 1.最基本客户端连服务器 服务端运行后一直处于监听状态,客户端每启动一次服务端就接收一次连接并打印客户端的ip地址和端口号.(服务端 ...

  2. Eclipse、IDEA安装JavaFX

    简介 JavaFX插件 e(fx)eclipse是一组工具和必要的库,它们帮助您执行JavaFX编程,确保您已经作为插件将其安装在eclipse上了. JavaFX Scene Builder Jav ...

  3. BZOJ——1610: [Usaco2008 Feb]Line连线游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1610 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 2 ...

  4. [Bzoj3205][Apio2013]机器人(斯坦纳树)(bfs)

    3205: [Apio2013]机器人 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 977  Solved: 230[Submit][Status] ...

  5. kafka基础介绍

    kafka基础介绍 一.kafka介绍 1.1主要功能 根据官网的介绍,kafka是一个分布式流媒体的平台,它主要有三大功能: 1.11:It lets you publish and subscri ...

  6. PLsql/Oracle数据库中没有scott账户,如何创建并解锁

    当然首先要装好Oracle 11g 然后还要有sqlplus,这个在Oracle11g的时候应该都会配上的 进入正题,如果oracle/plsql没scott账户,如何创建 先找到Oracle安装目录 ...

  7. Flink的安装配置

    一. Flink的下载 安装包下载地址:http://flink.apache.org/downloads.html  ,选择对应Hadoop的Flink版本下载 [admin@node21 soft ...

  8. Java Enum枚举的用法(转)

    说明:Java的枚举比dotnet的枚举好用,至少支持的方式有很多. 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以 ...

  9. Maven生成项目文档

    Maven项目可以通过maven-site-plugin插件生成项目文档,无论什么项目都可以生成. 执行命令: mvn site 生成完成的输出目录在${basedir}/target/site文件夹 ...

  10. Jquery表单序列化和json操作

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...