《java入门第一季》之面向对象(方法重写问题)
方法重载的引入:根据一个案例:
/* 继承中成员方法的关系: 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(); } }