重载和重写

1.1继承中方法重写
子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖。(注意:是完全相同的)

class Fu
{
public void show()
{
System.out.println("Fu show");
}
}
class Zi extends Fu
{
//子类复写了父类的show方法
public void show()
{
System.out.println("Zi show");
}
}

  

当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
在子类中,访问父类中的成员方法格式:
super.父类中的成员方法();

public class Test {
public static void main(String[] args) {
new NewPhone().showNum();
}
}

//手机类
class Phone{
public void sendMessage(){
System.out.println("发短信");
}
public void call(){
System.out.println("打电话");
}
public void showNum(){
System.out.println("来电显示号码");
}
}

//智能手机类
class NewPhone extends Phone{

//覆盖父类的来电显示号码功能,并增加自己的显示姓名和图片功能
public void showNum(){
//调用父类已经存在的功能使用super
super.showNum();
//增加自己特有显示姓名和图片功能
System.out.println("显示来电姓名");
System.out.println("显示头像");
}
}

  

1.2方法重写的注意事项:
子类方法覆盖父类方法,必须要保证权限大于等于父类权限

class Fu(){	
void show(){}
public void method(){}
}
class Zi() extends Fu{
public void show(){} //编译运行没问题
void method(){} //编译错误
}	

  



写法上稍微注意:必须一模一样:函数的返回值类型 函数名 参数列表都要一样
总结:当一个类是另一个类中的一种时,可以通过继承,来继承属性与功能。如果父类具备的功能内容需要子类特殊定义时,进行方法重写。

1.3继承中子类中出现与父类重名的成员变量
当子父类中出现了同名成员变量时,在子类中若要访问父类中的成员变量,必须使用关键字super来完成。
在子类中,访问父类中的成员变量格式:
super.父类中的成员变量

class Fu
{
//Fu中的成员变量。
int num = 5;
}
class Zi extends Fu
{
//Zi中的成员变量
int num = 6;
void show()
{
//子父类中出现了同名的成员变量时
//在子类中需要访问父类中非私有成员变量时,需要使用super关键字
//访问父类中的num
System.out.println("Fu num="+super.num);
//访问子类中的num2
System.out.println("Zi num2="+this.num);
}
}
class Demo5 
{
public static void main(String[] args) 
{
Zi z = new Zi(); //创建子类对象
z.show(); //调用子类中的show方法
}
}	

  



1.4this与super调用普通成员与构造方法
调用普通成员:
this.成员变量 可以访问本类对象的成员变量
super.成员变量 可以访问父类对象的成员变量
this.成员方法() 可以访问本类对象的成员方法
super.成员方法() 可以访问父类对象的成员方法

调用构造方法:
this(其他参数) 可以访问本类其他的构造方法
super(其他参数) 可以访问父类其他的构造方法

默认子类调用父类构造方法
子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super();

2.1方法重载
方法重载概述:
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
方法重载特点:
与返回值类型无关,只看方法名和参数列表
在调用时,虚拟机通过参数列表的不同来区分同名方法
基本使用:

public class Demo01Method {
public static void main(String[] args) {
int a = 10;
int b = 20;

// 求和
int result = sum(a, b);
System.out.println("result:" + result);

int c = 30;
// 求和
result = sum(a,b,c);
System.out.println("result:"+result);
}

//两个float类型的数据求和
public static float sum(float a,float b) {
return a + b;
}

// 三个整数的求和
public static int sum(int a,int b,int c) {
return a + b + c;
}

// 两个整数的求和
public static int sum(int a, int b) {
return a + b;
}
}

  

人生就像一场路途,尝遍酸甜苦辣,方知人生苦甜.
原文地址:https://www.cnblogs.com/zennon/p/8087936.html