《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();
	}
}


原文地址:https://www.cnblogs.com/wanghang/p/6299866.html