`

JAVA基础知识(一)——继承

阅读更多
继承的基本语法:

     在JAVA语言中, 用extends关键字来表示一个类继承另一个类,例如:

public class Sub extends Base {
     ...
}

以上代码表明Sub类继承了Base类。那么Sub类到底继承了Base类的哪些东西呢?这需要分两种情况:
  • 当Sub类和Base类位于同一个包中,Sub类继承了Base类中public、protected和默认级别的成员变量和成员方法。
  • 当Sub类和Base类位于不同包中,Sub类继承了Base类中public、protected的成员变量和成员方法。


1、方法重载(Overload):

      重载方法必须满足以下条件:

  • 方法名相同。
  • 方法的参数类型、个数、顺序至少有一项不同。
  • 方法的返回类型可以不相同。
  • 方法的修饰符可以不相同。

例如以下Simple类中已经定义了一个amethod()方法。

public class Simple {
    public void amethod(int i, String s);
    //加入其他方法
}



下面哪些方法可以加入到Simple类中,并且保证编译正确呢?

A)public void amethod(String s, int i){}                       (可以)

B)public int amethod(int i, String s){return 0;}           (不可以)

C)private void amethod(int i, String mystring){}         (不可以)

D)public void Amethod(int i, String s){}                       (可以)

E)abstract void amethod(int i);                                    (不可以)



2、方法覆盖(Override):

     覆盖方法必须满足多种约束:

     (1)子类方法的名称、参数类型和返回类型必须和父类方法的名称、参数类型和返回类型一致。例如:以下代码将导致编译错误:
 
public class Base {
    public void method() {...}
}

public class Sub extends Base {
   public int method() {  //编译错误,返回类型不一致
     return 0;
   }
}


   (2)子类方法不能缩小父类方法的访问权限。例如:

public class Base {
    public void method() {...}
}

public class Sub extends Base {
    private void method() {...} //编译错误子类方法缩小了父类方法的访问权限
} 

   (3)子类方法不能抛出比父类方法更多的异常。子类方法抛出的异常必须和父类方法抛出的异常相同,或者子类方法抛出的异常是父类方法抛出的异常的子类。

    例如,假设异常类ExceptionSub1和ExceptionSub2是ExceptionBase类的子类,则以下代码是合法的:

publc class Base {
    void method() throws ExceptionBase  {}
}

public class Sub1 extends Base {
   void method() throws ExceptionSub1  {}
}

public class Sub2 extends Base {
   void method() throws ExceptionSub1,ExceptionSub2  {}
}

public class Sub3 extends Base {
   void method() throws ExceptkionBase  {}
}
  
以下代码不合法:

public class Base {
    void method() throws ExceptionSub1 {} 
}

public class Sub1 extends Base {
   void method() throws ExceptionBase {}  //编译出错
}

public class Sub2 extends Base {
  void method() throws ExceptionSub1,ExceptionSub2 {}  //编译出错
}



   (4)方法覆盖只存在于父类之间(包括直接父类和间接父类)之间。在同一个类中的方法只能重载,不能覆盖。

   (5)父类的静态方法不能被子类覆盖为非静态方法。例如以下代码将编译错误:

public class Base {
  public static void method() {...}
}

public class Sub extends Base {
  public void method() {...}  //编译出错 
     
   (6)子类可以定义与父类的静态方法同名的静态方法,以便在子类中可以隐藏父类的静态方法。在编译时,子类定义的静态方法也必须方法覆盖类似的约束:方法的参数签名一致,返回类型一致,不能缩小父类的访问权限,不能抛出更多的异常。

public class Base {
   static int method(int i) throws BaseException() {return 0;}
}

public class Sub extends Base {
  public static int method(int i) throws SubException() {return 0;}
} 
   
   (7)父类非静态方法不能被子类覆盖为静态方法。例如以下代码不合法:

public class Base {
   void method() {}
}

public class Sub extends Base {
  static void method() {}  //编译出错
}
     
   (8)父类的私有方法不能被子类覆盖。

      (9)父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法;二是子类重新声明父类的的,抽象方法。例如以下代码是合法的:
  
public abstract class Base {
    abstract void method1();
    abstract void method2();
}

public abstract Sub extends Base {
   public void method1() {...}  //实现method1()方法,并且扩大访问权限。
  public abstract void method2()  //重新声明method2()方法,仅扩大访问权限,但不实现。
}
       
   (10)父类的非抽象方法可以被覆盖为抽象方法。例如以下代码是合法的:

public class Base {
    void method() {}
}

public class Sub extends Base {
    public abstract void method();  //合法
}

 
3、方法覆盖与方法重载的异同

    方法覆盖和方法重载具有以下相同点:

  • 都要求方法同名。
  • 都可以用于抽象方法和非抽象方法之间。
  

方法覆盖和方法重载不同点:

  • 方法覆盖要求参数签名一致,而方法重载要求参数签名不一致。
  • 方法覆盖要求返回类型必须一致,而方法重载对此不做限制。
  • 方法覆盖只用于子类覆盖父类的方法,方法重载用于同一个类中的所有方法(包括从父类继承而来的方法)。
  • 方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制 。
  • 父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次。
   

以下是子类Sub覆盖了父类Base的method(int v)方法,并且提供了多种重载方法:

public class Base {   
   protected void method(int v) {}   
   private void method(String s){}  //重载   
}   
  
public abstract class Sub extends Base {   
   public void method(int v) {}  //覆盖   
  public int method(int v1, int v2) {return 0;}  //重载   
  protected void method(String s) Exception {}  //重载   
  abstract void method();  //重载   
} 
分享到:
评论

相关推荐

    java基础——————试题库

    这个“java_test”文件很可能是包含了一系列测试题目的集合,涵盖了以上提到的所有Java基础知识点,通过练习这些题目,你可以检验自己的学习成果,发现并弥补知识盲点,进一步巩固Java基础。在学习过程中,不断实践...

    Java面试题必备——Java基础知识部分汇

    Java面试题必备——Java基础知识部分汇总 本文总结了Java基础知识部分的重要知识点,涵盖了Java面试中常见的问题,包括作用域、String类、int和Integer的区别、String和StringBuffer的区别、运行时异常与一般异常的...

    Java基础知识——Java入门与加深

    本文将深入探讨Java的基础知识,旨在帮助初学者快速入门并进一步加深对Java的理解。 首先,我们来了解一下Java的核心概念。Java是基于C++语言发展而来的,但去除了指针等复杂特性,使代码更加安全。它的“Write ...

    java web项目案例——知识管理软件

    Java Web 项目案例——知识管理...本篇文章详细介绍了 Java Web 项目案例——知识管理软件的相关知识点,涵盖 Java EE 概述、Servlet 基础、JSP、JSTL、JavaBean、Hibernate 等技术,为读者提供了一份详细的知识指南。

    JAVA学习笔记————————

    1. **JAVA基础**:这部分包括JAVA语法的基础知识,如数据类型(基本类型与引用类型)、变量、运算符、流程控制(条件语句、循环语句)、方法的定义和调用等。此外,还会涉及类和对象的概念,这是面向对象编程的核心...

    尚硅谷Java基础实战——Bank项目下载地址

    这个项目以银行系统为背景,涵盖了诸多Java基础知识点,包括类与对象、数据类型、控制结构、异常处理、集合框架、IO流等。 1. 类与对象:在Bank项目中,你会遇到各种类,如Bank、Account、Customer等,这些都是模拟...

    Java语言程序设计——基础篇

    根据提供的信息,“Java语言程序设计——基础篇”这本书主要针对初学者介绍了Java编程的基础知识。虽然部分内容并未给出具体章节或细节信息,但基于书名、描述及常见的Java基础教程内容,我们可以推测书中涵盖的主要...

    java基础知识总结(一)(csdn)————程序.pdf

    总结来说,Java的基础知识不仅包括了对语言特性的理解,更重要的是要深入掌握面向对象编程的三大核心特性——继承、封装和多态。掌握这些概念对于编写高质量、高效率的Java应用程序至关重要。通过继承,我们能够重用...

    JAVA入门到精通——30天学通JAVA

    《JAVA入门到精通——30天学通JAVA》是一本专为初学者设计的Java编程教程,旨在帮助读者在短短的30天内快速掌握Java编程基础,从而踏入编程世界的大门。Java作为一种广泛应用于互联网、移动应用、企业级开发等领域的...

    java初学者适用——java实例大全

    总之,"Java初学者适用——Java实例大全"是一个全面的教程,它不仅包含了Java语言的基础,还深入到高级主题,让初学者通过实践来深化理解,逐步成长为熟练的Java程序员。这份大全的每个实例都是一个学习的机会,通过...

    Java语言入门知识——为初学者提供入门基础

    Java语言是一种广泛应用于...通过学习以上基础知识,你将具备初步的Java编程能力。继续深入学习,你将能够开发更复杂的应用程序,如Web应用、数据库应用等。Java的世界广阔而精彩,欢迎踏入这个充满挑战和机遇的领域。

    java基础理论知识串讲——苏州NIIT李老师.ppt

    这只是Java基础知识的冰山一角,还有更多关于变量声明、控制流语句、类和对象、继承、接口、异常处理、集合框架等内容等待深入学习。理解并熟练掌握这些基础知识,对于成为一名优秀的Java程序员至关重要。

    Java自学之路——超仔细含练习项目及源码 Java知识体系最强总结————含各个阶段的面试题

    ### Java自学之路——超详细含练习项目及源码 #### Java知识体系最强总结 ...通过上述内容的学习,不仅可以掌握Java的基础知识,还能了解到更多关于Java开发的实践经验和技巧。这对于初学者来说是非常宝贵的学习资源。

    KJava深入浅出——Java在PDA上的程序设计

    1. **Java基础知识**:首先,书中可能会介绍Java编程的基础知识,如变量、数据类型、控制结构(循环、条件语句)、类和对象、封装、继承和多态等,这些都是编写任何Java程序的基础。 2. **J2ME和KJava概述**:会...

    java课程设计实例——java源代码

    在这个“java课程设计实例——java源代码”压缩包中,我们很可能会找到一系列的Java源码文件,这些文件可能涵盖了各种Java编程的基础到高级概念。 首先,"ch01"这个文件名可能是章节的标识,暗示了这个压缩包可能...

    java实例——闹钟——看看吧 总有思路的

    在Java编程语言中,创建一个闹钟应用是一个常见的实践任务,可以帮助我们理解事件处理、定时器和多线程等核心概念。...不断练习和理解这些基础知识,将有助于提升你在Java编程领域的技能。加油学习,祝你成功!

    JAVA核心知识点整理——java自学资料.rar

    这份"JAVA核心知识点整理——java自学资料.rar"包含了一份详细的Java学习资源,旨在帮助已经具备一定Java基础知识的开发者进一步提升技能,深入理解Java的底层机制。以下是这份资料可能涵盖的一些核心知识点和学习...

    Java笔试题————精华中的精华

    理解并能运用这些概念是成为一名合格的Java开发者的基础。同时,深入理解Java内存模型、垃圾回收机制、线程并发编程、异常处理、集合框架(List、Set、Map等)以及IO流等核心特性也至关重要。 Oracle是广泛使用的...

    JAVA实训项目——雷霆战机源代码

    【JAVA实训项目——雷霆战机源代码】是一个针对Java编程学习者设计的实际操作项目,旨在帮助学生深入了解游戏开发的原理和技巧。在这个项目中,你将接触到如何使用Java语言构建一个简单但具有完整功能的飞行射击游戏...

Global site tag (gtag.js) - Google Analytics