继承与多态
继承;
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基础-第4章继承与多态-练习题-200910.doc》中的练习题,程序员不仅能够复习和巩固继承、多态、构造方法、方法覆盖和final类等知识点,还能够提高解决实际问题的编程技能。这份资源是Java初学者...
Java编程语言以其面向对象特性,包括接口、继承、多态性等核心概念,为开发者提供了强大的设计和实现能力。...对于初学者来说,这是一个很好的起点,而对于经验丰富的开发者来说,也是一个复习和巩固基础知识的好机会。
1. **Java基础知识**:Java的基础学习通常涵盖变量、数据类型、运算符、流程控制(如if-else,for,while,switch)、类与对象、封装、继承和多态等概念。这些章节的学习是理解面向对象编程的关键。 2. **...
- 类与对象:Java是一种面向对象的语言,了解类的定义、构造器、封装、继承和多态是基础。 - 异常处理:学习如何使用try-catch-finally语句块进行异常捕获和处理。 - 内存管理:理解栈内存和堆内存的区别,以及...
### Java基础复习知识点详解 #### 一、Java语言特点 - **高级编程语言**:Java是一种面向对象的高级编程语言,具有以下特点: ...以上是关于Java基础复习的知识点详解,对于理解Java的核心概念和编程实践非常重要。
2. **类与对象**:Java是面向对象的语言,理解类的定义、构造器、封装、继承、多态等概念至关重要。案例中可能会涉及这些知识点的实际应用。 3. **集合框架**:ArrayList、LinkedList、HashSet、HashMap等容器是...
本复习资料涵盖了JAVA语言程序设计的基础知识,主要涉及选择题、判断题和程序分析题,以及一个综合题,重点在于理解JAVA的核心概念、语法特性和面向对象编程。 1. **单选题**: - 问题没有给出具体的题目内容,但...
Java是一门面向对象的语言,这一章可能会讲解类的定义、对象的创建、封装、继承和多态等概念,以及构造函数、访问修饰符和this关键字的用法。 3. **ch03** - 数组与集合框架 数组是存储固定数量同类型数据的容器...
Java编程语言是软件开发领域广泛使用的编程语言,尤其在企业级应用中占据着主导地位。作为Java程序员,掌握基础..."JAVA程序员必读--基础篇"的CHM文件应该包含了这些内容的详细讲解,是学习和复习Java基础的宝贵资源。
此外,理解Java的核心概念,如类、对象、继承和多态,以及掌握常用的Java库(如集合、I/O流和多线程)和框架,对于成为一名熟练的Java开发者至关重要。 总的来说,这份课后答案文档涵盖了Java入门的各个方面,通过...
4. **类与对象**:Java是面向对象的语言,核心概念包括类的定义、对象的创建、封装、继承和多态。理解类的构造函数、方法、属性以及访问修饰符(public、private、protected、默认)至关重要。 5. **数组**:数组是...
复习Java,首先需要理解其基本概念和技术要点。 一、Java基础知识 1. Java语言的特点: - 跨平台性:Java代码通过JVM(Java虚拟机)实现“一次编写,到处运行”。 - 面向对象:Java支持类、对象、封装、继承、...
这份"Java复习资料"包含了从第一章到第十章的详细学习内容,覆盖了Java语言的基础到高级特性,对于准备Java考试或者提升编程技能的学员来说非常有价值。 1. **第一章:Java简介** - Java的历史和发展 - Java的...
这份“Java基础知识总结 - 超详细篇收藏”压缩包包含了关于Java编程的基础知识,是学习和复习Java语言的理想资源。以下是对其中可能涵盖的知识点的详细解释: 1. **Java环境搭建**:学习Java的第一步是安装JDK...
本文档提供了JAVA基础知识的复习笔记,涵盖了JAVA的基础概念、数据类型、运算符、控制流程、类和对象、继承、多态、抽象类和接口等方面的知识。 一、数据类型 在JAVA中,有以下几种基本数据类型: * 整数类型:...
1. `JAVA复习题201004.xls`:这可能是一个2010年4月的Java复习题目集合,可能包含了选择题、填空题、简答题等多种题型,用于帮助考生复习Java的基础知识和进阶概念,如类与对象、继承、多态、异常处理、集合框架、IO...
这份"Java基础核心总结_副本"的资料,很可能是对Java语言基础知识的全面梳理,旨在帮助学习者或面试者巩固和复习Java的核心概念。下面将根据标题和描述,结合常见的Java基础知识,来展开详细讲解。 一、基础语法 ...
"Java基础复习"这个主题涵盖了从入门到进阶的各种概念,旨在帮助学习者巩固和深化对Java语言的理解。以下是一些关键的知识点: 1. **Java语言简介**:Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems...