- 浏览: 183987 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
枫了的红叶儿:
事务与存储过程的区别 -
黄进宝与wys:
...
Mysql事务处理 -
youshenxuzuo:
您好, 我有个问题想请教一下。关于start方法启动线程,自动 ...
java thread: run方法和john方法 -
Leisurez:
[i][u]引用[list]
[*]
[/list][/u][ ...
Hibernate的查询方式 -
Leisurez:
[flash=200,200][/flash]
Hibernate的查询方式
什么是方法覆盖
如果在子类中定义的一个方法,其名称、返回类型及参数签名正好与父类中某
个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父
类的方法。
覆盖方法必须满足的十大约束
一:子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和
返回类型一致
二:子类方法不能缩小父类方法的访问权限
三:子类方法不能抛出比父类方法更多的异常,子类方法抛出的异常必须和父类
方法抛出的异常相同,或者子类方法抛出的异常类是父类方法抛出的异常类的子
类
四:方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间。在同一个
类中方法只能被重载,不能被覆盖。(哈哈,这个是方法覆盖的定义吧)。
五:父类的静态方法不能被子类覆盖为非静态方法。
六:子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的
静态方法。子类隐藏父类的静态方法和子类覆盖父类的实例方法,这两者的区别
在于:运行时,Java虚拟机把静态方法和所属的类绑定,而把实例方法和所属的
实例绑定。
第六点比较长,你是否真的理解了呢???
看个SCJP题库的经典例子吧,并说说为什么是这样的结果
代码:
class Base {
void method() {
System.out.println("method of Base");
}
static void staticMethod() {
System.out.println("static method of Base");
}
}
class Sub extends Base {
void method() {
System.out.println("method of Sub");
}
static void staticMethod() {
System.out.println("static method of Sub");
}
}
public class Test2 {
public static void main(String[] args) {
Base sub1 = new Sub();
sub1.method();
sub1.staticMethod();
Sub sub2 = new Sub();
sub2.method();
sub2.staticMethod();
}
}
static method of Base
method of Sub
static method of Sub
七:父类的非静态方法不能被子类覆盖为静态方法。
八:父类的私有方法不能被子类覆盖。 同第六点一样,再来个经典的SCJP题目
class Base {
private String showMe() {
return "Base";
}
public void print(){
System.out.println(showMe());
showMe();
}
}
public class Sub extends Base {
public String showMe(){
return "Sub";
}
}
public static void main(String args[]){
Sub sub=new Sub();
sub.print();
}
}
各位是否答对了呢? 这就是传说中的SCJP题目,哈哈都是考语法的。 想起偶当年初中时学英语的情景了,老师整天唧唧呱呱分析那些语法个不停。我想大家请自己的初中英语老师来讲core java。SCJP保证可以考满分。
九:父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法;二是子类重新声明父类的抽象方法。
十:父类的非抽象方法可以被覆盖为抽象方法。
另外,关于构造函数:
子类的实例化过程:子类中所有的构造函数会去访问父类中的空参数构造函数,那是因为每一个子类构造函数中的第一行都有一句隐式super语句。
构造函数不能继承。子类的构造函数可以通过super关键字显式调用父类中的构造函数。如果子类中的构造函数没有显式调用父类中的构造函数,编译器就会自 动在子类的构造函数中调用父类中参数为空的构造函数。于是,当父类中没有参数为空的构造函数,而子类中又没有显示调用父类的其他构造函数,编译时就会报 错。这一点需要特别注意。当父类中没有定义任何构造函数时,编译器就会为它指定一个参数为空的默认的构造函数;如果父类中定义了构造函数,那么编译器就不 会为它指定一个参数为空的默认构造函数了。因此,如果某个类有可能成为其他类的父类,为了避免发生不必要的编译错误,最好为它编写一个参数为空的构造函 数。
eg1.父类Sup中没有定义构造函数,编译程序将为它指定一个参数为空的默认构造函数。子类Sub中也没有定义构造函数,编译程序也会为它指定一个参数为空的默认的构造函数,并且会在这个默认的构造函数中调用父类的参数为空的构造函数。
public class Sub extends Sup{
//子类中没有定义构造函数
public static void main(String args[]){
Sub sub=new Sub();
}
}
class Sup{
//父类中没有定义构造函数
}
public class Sub extends Sup{ public class Sub extends Sup{ class Sup{ public class Sub extends Sup{ class Sup{ public class Sub extends Sup{ class Sup{
eg2.父类Sup中没有定义构造函数,编译程序将为它指定一个参数为空的默认构造函数。子类定义了一个带整型参数的构造函数,在这个构造函数中子类没有显式调用父类的构造函数,所以编译器为在它里面调用父类中参数为空的构造函数。
//子类中定义类一个带整型变量参数的构造函数
public Sub(int i){
//
}
public static void main(String args[]){
Sub sub=new Sub(1);
}
}
class Sup{
//父类中没有定义构造函数
}
eg3.父类中定义了一个带整型参数的构造函数,因此编译器不再为它指定参数为空的默认的构造函数。子类中也定义了一个带整型参数的构造函数。编译时,编
译器将试图在子类的构造函数中调用父类的参数为空的构造函数,但是父类中没有定义参数为空的构造函数,所以编译程序将会报错。排错的方法时在子类的构造函
数中显示调用父类的构造函数,或者在父类中添加一个带空参数的构造函数。
//子类中定义类一个带整型变量参数的构造函数
public Sub(int i){
//
}
public static void main(String args[]){
Sub sub=new Sub(1);
}
}
//父类中定义了一个带整型参数的构造函数
public Sup(int i){
//
}
}
排错方法1:
//子类中定义类一个带整型变量参数的构造函数
public Sub(int i){
super(i);//调用父类中的构造函数
}
public static void main(String args[]){
Sub sub=new Sub(1);
}
}
//父类中定义了一个带整型参数的构造函数
public Sup(int i){
//
}
}
排错方法2:
//子类中定义类一个带整型变量参数的构造函数
public Sub(int i){
//
}
public static void main(String args[]){
Sub sub=new Sub(1);
}
}
//父类中定义了一个带整型参数的构造函数
public Sup(int i){
//
}
//定义一个带空参数的构造函数
public Sup(){
//
}
}
发表评论
-
Core Java Interview Questions Answers in Finance domain
2012-02-27 11:10 10681. What is immutable object? Ca ... -
Java transient 关键字
2012-02-03 10:09 5691、transient关键字只能修饰变量,而不能修饰方法和类。 ... -
Java 序列化的问题
2012-01-17 17:39 1159【本文为转载,以做备忘,对其中的例子做了修改,原文地址:htt ... -
Java的参数传递
2012-01-16 11:41 1024有人说java 参数传递在对primitive类型的参 ... -
Java 异常知识点
2012-01-12 17:00 1951一、异常的继承结构 Java异常的基类为java ... -
java thread: run方法和john方法
2012-01-11 11:33 41691、要实现多线程 ... -
java 格式化输出 printf 总结
2012-01-09 18:17 24774通过一个具体实例说明: double d = 345.67 ... -
scjp 知识点
2012-01-05 22:03 966标识符 □标识 ... -
JAVA枚举类型入门
2011-05-20 09:41 995Java 代码的两个基本的构造块是类 和接口。 ... -
Java Map 遍历方法
2011-04-26 16:34 906第一种: Map map = new HashMap ... -
【转】程序员必知:Java代码常见的十种错误(2)
2011-03-10 15:52 1087六、常见错误6:检查new 操作的结果是否为null ... -
【转】程序员必知:Java代码常见的十种错误(1)
2011-03-10 15:48 1034【IT168 技术】每一个程序员在编写代码的过程中都免不了 ... -
Java基础知识是刨根问底
2011-02-25 16:26 10561、类A实现了接口I,A能否改变I中定义的变量? 2、 ... -
Java编程题汇总备忘
2011-02-15 22:30 16191.从键盘输入一组数(用,分割),排序后输出 【分析】使用S ... -
JDK1.5/1.6新特性总结
2011-02-14 12:39 1235一、JDK1.5新特性 1、泛型(Generic) 可以在编 ... -
XML知识点备忘
2011-01-22 10:58 13341.xml名称空间通过一系 ... -
JDBC连接数据库的完整步骤
2011-01-22 00:13 8207JAVA连接数据库的方式有多种,根据所需要的不同数据库驱动分, ... -
Java IO 知识点备忘
2011-01-21 14:16 10331. java io 库采用Decorator设计模式 2. ... -
Java 试题备忘
2011-01-18 15:36 9191. Given the following class de ... -
java基础知识备忘拾遗
2011-01-17 23:21 1303一、接口 1.接口中的方法默认都是public和abstra ...
相关推荐
在Java编程语言中,子类覆盖父类的方法时,关于异常处理有特定的规定。这个问题的核心是子类在重写父类方法时抛出异常的规则。通常,我们说子类覆盖父类方法时,抛出的异常不能比父类更"宽泛",这里的"宽泛"指的是...
要创建圆形按钮,我们需要覆盖`paintComponent()`方法,这是Java组件的绘制方法。我们可以通过继承JButton类并覆写这个方法来实现。在`paintComponent(Graphics g)`中,我们使用Graphics2D对象的`drawOval()`方法...
在Java编程语言中,抽象类和接口是两种主要的抽象数据类型。...以上内容涵盖了抽象类和接口在Java中的定义、使用、区别以及方法重载和覆盖的概念,为Java面试中可能出现的相关问题提供了详细的解释。
Java是一种广泛使用的面向对象编程语言,其面向对象特性是其核心设计...在学习这些代码时,应重点关注如何通过类和对象的定义、继承关系、方法的覆写和多态性来组织和解决问题,以及如何利用Java的其他特性来优化代码。
- **解释**:当一个对象的equals()方法被覆写后,如果没有同时覆写hashCode()方法,可能会导致该对象在哈希表中的行为不符合预期。 - **实践建议**:确保equals()和hashCode()方法的一致性,以避免潜在的问题。 ###...
第7章《多形性》深入讲解了Java的多态性,包括上溯造型的概念、方法绑定、扩展性和覆写。多态性是面向对象编程中的一个重要特性,它允许我们编写更加灵活和可维护的代码。 总之,《Thinking in Java》全面覆盖了...
面向对象程序设计是Java语言的核心特性之一,它包括三个主要原则:封装、继承和多态。在本讲中,我们将深入探讨其中的继承与多态。 首先,回顾面向对象设计中的基本概念。封装是将数据和操作这些数据的方法捆绑在...
这是因为编译器的“最短路径原则”将会选择使用本类中的变量和方法,本类中的属性、方法优先,从而可能会影响代码的可读性和可维护性。 11.养成良好的习惯,显式声明 UID。这是因为显示声明 serialVersionUID 可以...
3. 覆写优先原则:子POM中的依赖声明会覆盖父POM中的相同声明。 解决依赖冲突的方法包括运行`mvn dependency:tree`命令,查看依赖树,然后根据以上原则调整POM文件中的依赖顺序。如果需要排除某个特定版本,可以...
Java中方法的格式** 方法定义的基本格式如下: ```java public returnType methodName(paramType param1, paramType param2) { // method body } ``` **3. 方法里的属性** - **参数列表**:方法调用时传递的信息...
- **抽象方法的设计原则**:抽象方法应该能够被继承的类所覆盖(覆写/重写),因此通常使用 `public` 或 `protected` 来定义抽象方法的访问级别。 #### 题目四:最终变量与方法内的自增操作冲突 **题目描述**: ```...
- **方法和实例变量的继承**:子类可以继承父类的方法和实例变量,并可以对其进行覆盖或扩展。 3. **封装**:封装是指将对象的状态和行为结合在一起,对外只暴露有限的接口。这是面向对象编程的一个基本原则,它有...
11.3 覆写抽象方法和具体方法 272 11.4 覆写抽象字段和具体字段 274 11.5 覆写抽象类型 280 11.6 无须区分访问方法和字段:统一访问原则 280 11.7 对象层次结构的线性化算法 282 11.8 本章回顾与下...
在Java等语言中,多态性可以通过方法重写(Override)和接口实现来体现。 4. 抽象:抽象是将现实世界中的复杂问题简化为易于理解和处理的模型。在编程中,抽象通常通过创建抽象类或接口来实现,它们定义了共性的...
在本单元材料中,我们将深入探讨面向对象软件工程的核心概念、原则以及如何在Java编程语言中实现它们。 1. **面向对象的基本概念**: - **类与对象**:面向对象编程的基础是类,它是创建对象的模板。类定义了对象...
在自定义视图中,开发者通常需要覆写`onDraw()`方法,利用`Canvas`进行图形绘制,包括圆形路径、渐变填充、文字渲染等。此外,还需要通过监听下载任务的进度更新,动态调整视图的显示状态。 对于"可以自定义一些...
1. **自定义View**:在Android中,创建一个定制的锁屏界面需要自定义View类,覆盖onDraw()方法,绘制出所需的图形。这可能包括三个颜色的圆环以及时间显示部分。 2. **颜色处理**:三原色的运用涉及到颜色的混合和...
覆盖或实现父类的方法时输入参数可以被放大 覆写或实现父类的方法时输出结果可以被缩小 依赖倒置原则 在真实的自然界中我们都是直接依赖各种真实的实现的. 而在程序世界. 我们要依赖接口或者抽象类. 从实现到抽象...