方法重载的引入:根据一个案例:
/*
继承中成员方法的关系:
A:子类中的方法和父类中的方法声明不一样,这个太简单。
B:子类中的方法和父类中的方法声明一样,这个该怎么玩呢?
通过子类对象调用方法:
a:(先)找子类中,看有没有这个方法,有就使用
b:(再)看父类中,有没有这个方法,有就使用
c:如果没有就报错。
*/
class Father {
public void show() {
System.out.println("show Father");
}
} class Son extends Father {
public void method() {//子类特有的东西
System.out.println("method Son");
} public void show() {//子类和父类中的方法一样,其实属于方法重写。在这里引入了这个概念
System.out.println("show Son");
}//如果把son中的show()屏蔽掉,子类对象调用show(),这个时候调用的就是父类中的show()*/子类对象既可以调用本类还可以调用父类
} class ExtendsDemo8 {
public static void main(String[] args) {
//创建对象
Son s = new Son();
s.show();
s.method();
//s.fucntion(); //找不到符号
}
}
方法重写概述:
/*
方法重写:子类中出现了和父类中方法声明一模一样的方法。 回顾方法重载:
本类中出现的方法名一样,参数列表不同的方法。与返回值无关。 子类对象调用方法的时候:
(先)找子类本身,子类没有的话(再找)父类。 方法重写的应用:
当子类需要父类的(功能),而(功能主体)子类有自己特有内容时,可以重写父类中的方法。
这样,即沿袭了父类的功能,又在这个功能里定义了子类特有的内容。*/
class Phone {
public void call(String name) {//name由子类call方法中传递过来
System.out.println("给"+name+"打电话");
}
} class NewPhone extends Phone{
public void call(String name) {
//System.out.println("给"+name+"打电话");
super.call(name);//super调用父类的内容沿用原来手机打电话的功能,super类似父类的对象,在子类中指代父类对象的引用
System.out.println("可以听天气预报了");//方法重写,新手机特有的功能
}
} class ExtendsDemo9 {
public static void main(String[] args) {
NewPhone np = new NewPhone();
np.call("林青霞");
}
}
方法重写的注意事项:
/*
方法重写的注意事项
A:父类中(私有方法不能被重写)
因为父类(私有方法子类根本就无法继承)
B:子类重写父类方法时,访问权限不能更低
最好就一致
C:父类静态方法,子类也必须通过静态方法进行重写
其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中会介绍 子类重写父类方法的时候,最好声明一模一样。
*/
class Father {
//private void show() {} /*
public void show() {
System.out.println("show Father");
}
*/ public void show() {
System.out.println("show Father");
} public static void daolong() { } public void method() {
System.out.println("method father");
} } class Son extends Father {
//private void show() {} /*
public void show() {
System.out.println("show Son");
}*/ public void show() {//show()方法重写
System.out.println("show Son");
} public static void daolong() {
}//父类是静态方法,子类重写静态方法 public void method() {
System.out.println("method Son");
}//method()方法重写
} class ExtendsDemo10 {
public static void main(String[] args) {
Son s = new Son();
s.show();
s.method();
}
}