关于继承,重载,重写,覆盖,final
2011-12-17 01:53
197 查看
package com.中行网安;
/**
* 下午9:01:50 2011-12-16 @author=wangtao
*/
/**
*
* @author wangtao
*
* 上午12:46:47 -2011-12-17
*
* final
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
1、final类
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
2、final方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
*
*
*
*/
public class ZhongXingWangAn {
public final int i = 0;
public final int i2 = 1;//final 类型变量没有初始化,下面的构造方法会报错!!!
public ZhongXingWangAn() {//构造方法默认为final类型
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Dad dad = new Dad();
Son son = new Son();
//son = (Son) dad;//这句竟然报Dad cannot be cast to Son
//son.instanceFeature();
dad = son;
Object object = dad;
dad.staticFeature();//父类方法不能被覆盖,输出父类中的I am a man !
dad.instanceFeature();//这叫覆盖,即父类方法被覆盖,输出子类中的I am brave too !------------son
//总结:父类方法中静态方法不会被覆盖,而实力方法会被覆盖。
son.testFinal();//
System.out.println(son.testFinalParam(2));
}
private static void testStatic() {
// TODO Auto-generated method stub
System.out.println("I am a static method !");
}
}
class Dad {
String name = "dad";
int age = 46;
public Dad() {//注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
// TODO Auto-generated constructor stub
}
public static void staticFeature(){
System.out.println("I am a man !");
}
public void instanceFeature(){
System.out.println("I am brave !");
}
public final void testFinal(){
System.out.println("I am final method !");
}
public int testFinalParam(final int i){
//i++;不允许操作
return i;
}
}
class Son extends Dad{//Son的所有方法默认为final
public Son(){
}
//@Override为什么静态方法不能加上重写的标记呢?
public static void staticFeature(){//这叫重写
System.out.println("I am a man too!----------son");
}
@Override
public void instanceFeature() {//疑惑了好一会,原来是类方法不能被重写。思考:为什么类方法不能被重写呢?
// TODO Auto-generated method stub
// super.instanceFeature();
System.out.println("I am brave too !------------son");
}
public void staticFeature(int i){//这叫重载
}
// public final void testFinal(){//final方法不能被覆盖,但是可以被继承,例如直接用Son对象调用父类中的final方法可以用
// System.out.println("I am final method !");
// }
// public int staticFeature(){//若只有返回类型不同,则不能重载,编译报错。
//
// }
public static void testStatic (){
staticFeature();//静态方法中直接调用父类或本类中静态方法。
new Son().staticFeature();//静态方法中用实例化对象调用父类或本类中静态方法,会有提醒警告,但是可以用,不推荐这样做。
//instanceFeature();//静态方法中直接调用实例化方法,编译错误。
new Son().instanceFeature();//静态方法中 "必须" 用对象调用父类或本类中的实例方法
}
public void testInstance(){
staticFeature();//实例方法中,不用创建对象可以直接调用父类或本类中的静态方法。
new Son().staticFeature();//实例方法中用对象调用父类或本身的静态方法,有提醒警告,不推荐这样做。
instanceFeature();//实例化方法中调用父类或本类的实例化方法,随便用。
new Son().instanceFeature();//实例化方法中用对象调用父类或本类中实例化方法,随便用。
}
//总结:除了静态方法中不能直接调用实例化方法外,其他都可编译通过。
//思考:为什么静态方法中可以直接调用静态方法,实例化方法中随便调用用呢?
}
class grandSon {//extends Son{//测试final类不能被继承,son已绝后,即son意味着成为了太监,哈哈。。
}
/**
* 下午9:01:50 2011-12-16 @author=wangtao
*/
/**
*
* @author wangtao
*
* 上午12:46:47 -2011-12-17
*
* final
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
1、final类
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
2、final方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
*
*
*
*/
public class ZhongXingWangAn {
public final int i = 0;
public final int i2 = 1;//final 类型变量没有初始化,下面的构造方法会报错!!!
public ZhongXingWangAn() {//构造方法默认为final类型
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Dad dad = new Dad();
Son son = new Son();
//son = (Son) dad;//这句竟然报Dad cannot be cast to Son
//son.instanceFeature();
dad = son;
Object object = dad;
dad.staticFeature();//父类方法不能被覆盖,输出父类中的I am a man !
dad.instanceFeature();//这叫覆盖,即父类方法被覆盖,输出子类中的I am brave too !------------son
//总结:父类方法中静态方法不会被覆盖,而实力方法会被覆盖。
son.testFinal();//
System.out.println(son.testFinalParam(2));
}
private static void testStatic() {
// TODO Auto-generated method stub
System.out.println("I am a static method !");
}
}
class Dad {
String name = "dad";
int age = 46;
public Dad() {//注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
// TODO Auto-generated constructor stub
}
public static void staticFeature(){
System.out.println("I am a man !");
}
public void instanceFeature(){
System.out.println("I am brave !");
}
public final void testFinal(){
System.out.println("I am final method !");
}
public int testFinalParam(final int i){
//i++;不允许操作
return i;
}
}
class Son extends Dad{//Son的所有方法默认为final
public Son(){
}
//@Override为什么静态方法不能加上重写的标记呢?
public static void staticFeature(){//这叫重写
System.out.println("I am a man too!----------son");
}
@Override
public void instanceFeature() {//疑惑了好一会,原来是类方法不能被重写。思考:为什么类方法不能被重写呢?
// TODO Auto-generated method stub
// super.instanceFeature();
System.out.println("I am brave too !------------son");
}
public void staticFeature(int i){//这叫重载
}
// public final void testFinal(){//final方法不能被覆盖,但是可以被继承,例如直接用Son对象调用父类中的final方法可以用
// System.out.println("I am final method !");
// }
// public int staticFeature(){//若只有返回类型不同,则不能重载,编译报错。
//
// }
public static void testStatic (){
staticFeature();//静态方法中直接调用父类或本类中静态方法。
new Son().staticFeature();//静态方法中用实例化对象调用父类或本类中静态方法,会有提醒警告,但是可以用,不推荐这样做。
//instanceFeature();//静态方法中直接调用实例化方法,编译错误。
new Son().instanceFeature();//静态方法中 "必须" 用对象调用父类或本类中的实例方法
}
public void testInstance(){
staticFeature();//实例方法中,不用创建对象可以直接调用父类或本类中的静态方法。
new Son().staticFeature();//实例方法中用对象调用父类或本身的静态方法,有提醒警告,不推荐这样做。
instanceFeature();//实例化方法中调用父类或本类的实例化方法,随便用。
new Son().instanceFeature();//实例化方法中用对象调用父类或本类中实例化方法,随便用。
}
//总结:除了静态方法中不能直接调用实例化方法外,其他都可编译通过。
//思考:为什么静态方法中可以直接调用静态方法,实例化方法中随便调用用呢?
}
class grandSon {//extends Son{//测试final类不能被继承,son已绝后,即son意味着成为了太监,哈哈。。
}
相关文章推荐
- 关于重写,重载,覆盖的一点体会
- 重写,覆盖,继承,重载的分析
- 关于继承中,方法的重写和重载(摘抄)
- c#重写,覆盖,隐藏,重载,继承
- 关于重载与重写(覆盖)的说明
- 关于继承中,方法的重写和重载(摘抄)
- 关于继承、构造、重载、重写
- 黑马程序员——Java基础---面向对象代码块和继承和this和super和重写和重载和final
- 关于重载和重写(覆盖)的比较
- 关于继承中(静态方法+私有方法)的覆盖与重写问题
- 关于重载,覆盖/隐藏,虚函数,纯虚函数,多重继承
- java学习之继承、重载、重写(覆盖)
- 关于Java继承之重写与重载
- 重载、覆盖(重写)、多重继承的区别
- java 继承 多态(override->重写(=覆盖)、overload->重载、polymorphism -> 多态)
- 关于函数的重载、覆盖和重写(Overload、Overwrite、Override)
- 【C++11】final, override,重载,重写覆盖,重写隐藏
- Java继承中方法的覆盖(重写)和重载
- java基础01 从Java的继承谈 重载、重写(覆盖)、隐藏
- 关于覆盖、隐藏、重载、重写的区别