`
jianchen
  • 浏览: 342889 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java基础复习(9)--继承与多态的理解

阅读更多

  继承与多态

 

 

继承;
java中所有类的父类Object
构造方法无法被继承。
方法的覆盖:返回值不同无法构成方法的覆盖。
访问修饰符访问级别:
public>protected>default>private

在覆盖父类的方法时:
子类的覆写方法的修饰符不能低于父类的对应方法的访问修饰符。
如:
public class Animal{
protected void sleep(){
 System.out.println("Animal");
    }
}
public class Person extends Animal{
private void sleep(){  
  System.out.println("Person");
}
}
 
 
分析:还是按照多态来理解。
假如有这样一个方法
void test(Animal a){
  a.sleep();
}
假设编译没问题,对于Animal类型而言,它的sleep方法具有相应的可见性(test方法属于 位于同一个包中的某类)。但如果传给test方法的是Person实例,则根据多态会调用person类的sleep()方法,而该方法却是私有的,无法 调用,这就导致了问题。所以可以反正以上观点。java语言也就规定以上约束。
 
super关键字
在java类中使用super来引用父类的成分
--super可用于访问父类中定义的属性
--super可用于调用父类中定义的成员方法
--super可用于在子类构造器中调用父类的构造器
--super的追溯不仅于直接父类
super()一定放在构造函数的第一行。
构造器 (默认构造器和自定义构造器)
类如果提供了非默认构造函数,则编译器不提供默认构造器,除非在定义类时未指定任何构造器。
如:

public class Base{
public Base(int i){}
}
public class Sub extends Base{
} //该类编译报错,父类没有默认构造器,子类的默认构造器找不到父类的默认构造器
 

重载:
方法名相同(参数类表不同),只能利用参数类型和参数个数的不同来重写方法。
 
**方法的覆盖:返回值不同无法构成方法的覆盖。**
 
证明 为什么重写方法不能依赖返回值的不同。
使用反证法:假如假设成立的话,

父类:
public class Base{
   public int test(){
     return 1;
   }
}
子类:
public class Sub extends Base{
    public String test(){
      return "test";
    }
}
 
测试:
public class Test{
  public static void main(String[] args){
    Base b = new Sub();
    int i = b.test();
  }
}
 

 

分析:

假设可以这样写,从语法和语义角度看没有问题。运行时,b虽然声明为Base类型,但它的真正实例为Sub类型。这样根据多态,调用 b.test()应该使用子类的test方法,这样就返回一个String,这样程序便会出现转换异常,所以这样写会导致程序的不安全性,所以假设不成 立,问题得证。

进一步的补充:

 

父类:
public class Base {
public Object test(){
    return "base";
}
}
子类:
public class Sub extends Base{
    public String test(){
        return "sub";
    }
}

测试:
 Base o = new Sub();
 System.out.println(o.test());
 



打印输出:
sub

分析:子类覆盖的方法的返回值是父类该方法的extension,这样在多态情况下没有问题。也能实现覆盖了。所以上面的方法返回值的约束可以做点修正哈。

分享到:
评论

相关推荐

    java 接口 类 继承 多态的简单实例

    Java编程语言以其面向对象特性,包括接口、继承、多态性等核心概念,为开发者提供了强大的设计和实现能力。...对于初学者来说,这是一个很好的起点,而对于经验丰富的开发者来说,也是一个复习和巩固基础知识的好机会。

    java基础1-8章复习-final.rar

    1. **Java基础知识**:Java的基础学习通常涵盖变量、数据类型、运算符、流程控制(如if-else,for,while,switch)、类与对象、封装、继承和多态等概念。这些章节的学习是理解面向对象编程的关键。 2. **...

    java-java面试题库整理-基础-JVM-线程并发-框架等.zip

    - 类与对象:Java是一种面向对象的语言,了解类的定义、构造器、封装、继承和多态是基础。 - 异常处理:学习如何使用try-catch-finally语句块进行异常捕获和处理。 - 内存管理:理解栈内存和堆内存的区别,以及...

    java基础复习

    ### Java基础复习知识点详解 #### 一、Java语言特点 - **高级编程语言**:Java是一种面向对象的高级编程语言,具有以下特点: ...以上是关于Java基础复习的知识点详解,对于理解Java的核心概念和编程实践非常重要。

    Java基础复习-Java JavaSE 必练基础案例(CSDN@追光者♂)

    2. **类与对象**:Java是面向对象的语言,理解类的定义、构造器、封装、继承、多态等概念至关重要。案例中可能会涉及这些知识点的实际应用。 3. **集合框架**:ArrayList、LinkedList、HashSet、HashMap等容器是...

    四川-JAVA语言程序设计(07129)-复习资料----参考答案.doc

    本复习资料涵盖了JAVA语言程序设计的基础知识,主要涉及选择题、判断题和程序分析题,以及一个综合题,重点在于理解JAVA的核心概念、语法特性和面向对象编程。 1. **单选题**: - 问题没有给出具体的题目内容,但...

    Java基础与实践-源代码.rar

    Java是一门面向对象的语言,这一章可能会讲解类的定义、对象的创建、封装、继承和多态等概念,以及构造函数、访问修饰符和this关键字的用法。 3. **ch03** - 数组与集合框架 数组是存储固定数量同类型数据的容器...

    JAVA程序员必读--基础篇

    Java编程语言是软件开发领域广泛使用的编程语言,尤其在企业级应用中占据着主导地位。作为Java程序员,掌握基础..."JAVA程序员必读--基础篇"的CHM文件应该包含了这些内容的详细讲解,是学习和复习Java基础的宝贵资源。

    《Java基础入门(第3版)》(Java):课后答案-docx文档

    此外,理解Java的核心概念,如类、对象、继承和多态,以及掌握常用的Java库(如集合、I/O流和多线程)和框架,对于成为一名熟练的Java开发者至关重要。 总的来说,这份课后答案文档涵盖了Java入门的各个方面,通过...

    Java基础考试复习资料

    4. **类与对象**:Java是面向对象的语言,核心概念包括类的定义、对象的创建、封装、继承和多态。理解类的构造函数、方法、属性以及访问修饰符(public、private、protected、默认)至关重要。 5. **数组**:数组是...

    Java详细复习提纲

    复习Java,首先需要理解其基本概念和技术要点。 一、Java基础知识 1. Java语言的特点: - 跨平台性:Java代码通过JVM(Java虚拟机)实现“一次编写,到处运行”。 - 面向对象:Java支持类、对象、封装、继承、...

    Java复习资料

    这份"Java复习资料"包含了从第一章到第十章的详细学习内容,覆盖了Java语言的基础到高级特性,对于准备Java考试或者提升编程技能的学员来说非常有价值。 1. **第一章:Java简介** - Java的历史和发展 - Java的...

    Java基础知识总结 - 超详细篇收藏.zip

    这份“Java基础知识总结 - 超详细篇收藏”压缩包包含了关于Java编程的基础知识,是学习和复习Java语言的理想资源。以下是对其中可能涵盖的知识点的详细解释: 1. **Java环境搭建**:学习Java的第一步是安装JDK...

    JAVA基础--复习笔记.pdf

    本文档提供了JAVA基础知识的复习笔记,涵盖了JAVA的基础概念、数据类型、运算符、控制流程、类和对象、继承、多态、抽象类和接口等方面的知识。 一、数据类型 在JAVA中,有以下几种基本数据类型: * 整数类型:...

    java 考试资料--第七组

    1. `JAVA复习题201004.xls`:这可能是一个2010年4月的Java复习题目集合,可能包含了选择题、填空题、简答题等多种题型,用于帮助考生复习Java的基础知识和进阶概念,如类与对象、继承、多态、异常处理、集合框架、IO...

    Java 基础核心总结-副本

    这份"Java基础核心总结_副本"的资料,很可能是对Java语言基础知识的全面梳理,旨在帮助学习者或面试者巩固和复习Java的核心概念。下面将根据标题和描述,结合常见的Java基础知识,来展开详细讲解。 一、基础语法 ...

    Java基础复习

    "Java基础复习"这个主题涵盖了从入门到进阶的各种概念,旨在帮助学习者巩固和深化对Java语言的理解。以下是一些关键的知识点: 1. **Java语言简介**:Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems...

    Java复习提纲-2009-5.doc

    总的来说,Java学习涉及广泛的语法和概念,包括但不限于基本语法、面向对象编程、类和对象、继承、多态、异常处理、集合框架、输入/输出流以及Java API的使用。JavaScript虽然在标签中提及,但根据文档内容,这里...

Global site tag (gtag.js) - Google Analytics