版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1.方法的重写
- 发生在子类中,方法名相同,参数列表不同,方法体不同
- 重写方法在被调用时,看对象的类型
class Foo{
public void f(){
System.out.println("Foo.f()");
}
}
class Goo extends Foo{
public void f(){
System.out.println("Goo.f()");
}
}
Goo obj1 = new Goo();
obj1.f();
Foo obj2 = new Goo();
obj2.f();
//输出的结果均为"Goo.f()",
//当子类对象的重写方法被调用时
//(无论是通过子类的引用调用还是
//通过父类的引用调用),运行的是
//子类的重写后的版本。
- 子类在重写父类的方法时,可以通过super关键字调用父类的版本
class Foo{
public void f(){
System.out.println("Foo.f()");
}
}
class Goo extends Foo{
public void f(){
super.f();
System.out.println("Goo.f()");
}
}
Foo obj2 = new Goo();
obj2.f();
/**
*输出结果为:
*Foo.f()
*Goo.f()
*子类重写方法中的super.f();
*调用了父类的版本;这样的语法
*通常用于子类的重写方法在父类
*方法基础之上进行功能扩展。
*/
重写的演示
package oo.day04;
//重写的演示
public class OverrideDemo {
public static void main(String[] args) {
/*
* 重写需要遵循“两同两小一大”原则:一般都是一模一样的
* 1.两同:
* 1)方法名称相同
* 2)参数列表相同
* 2.两小:
* 1)子类方法的返回值类型小于或等于父类的
* 2)子类方法抛出的异常小于或等于父类的
* 3.一大:
* 1)子类方法权限大于或等于父类的---访问权限
*/
}
}
//父类大,子类小
class Coo{
void sayHi() {}
double show() {return 0.0;}
Coo test() {return null;}
Doo say() {return null;}
}
class Doo extends Coo{
void sayHi() {}//void必须相同
double show() {return 1;}//基本类型相同
Doo test() {return null;}//或小于父类
//Coo say() {return null;}编译错误,引用类型必须小于或等于
}
2.重写与重载的区别
- 重写:
父子类中,方法名相同,参数类列表相同,方法体不同,
遵循“运行期”绑定,根据对象的类型绑定方法 - 重载:同一个类中,方法名称相同,参数列表不同,方法体不同
遵循“编译期”绑定,根据引用的类型绑定方法
package oo.day04;
//重写与重载的区别
public class OverrideDemo {
public static void main(String[] args) {
//重载看引用,重写看对象
Goo goo=new Goo();
Eoo o=new Foo();//向上造型
goo.test(o);
}
}
//方法的重载,引用为o,o为 Eoo类型,所以调Eoo 的test
class Goo{
void test(Eoo o) {
System.out.println("父型参数");
o.show();
}
void test(Foo o) {
System.out.println("子型参数");
o.show();
}
}
//方法的重写
class Eoo{
void show() {
System.out.println("父类show");
}
}
class Foo extends Eoo{
void show() {
System.out.println("子类show");
}
}
3.package和import
package
- 作用:避免类的命名冲突
- 包名可以有层次结构,在一个包中可以包含另外一个包
eg:package 包名1.包名3…包名n; - 建议:包名所有字母都小写
- 类的完全限定名:包名.类名
import
- 作用:声明类/引入类
- 同包中的类可以直接访问
不同包中的类想访问:
先import声明类在访问类(建议)----类的全局限定名(包名+类名)
类的全称-----太繁琐(不建议)