JAVA继承,重写与重载

继承(extends)

class Animal {}
public class Dog extends Animal {} //Dog类继承Animal类

示例

class Animal //父类
  {   
	private int weight;		
	Boolean sex;
	
	public Animal(){
		System.out.println("调用父类构造方法Animal(): " + this);
		this.weight=20;
        this.sex=true;
	    //this.age=10;//父类看不到子类新增属性
		}
	
	public int getWeight()
	{
		return this.weight;
	}	
	public void setWeight(int w)
	{  
		this.weight = w;
	    this.sex = false;
		//this.age=10;//父类看不到子类新增属性
	    
	}
  }
 
 class Dog extends Animal //子类Dog继承父类Animal
  {	  //子类新增属性
	  int age; 

	  public Dog(){
	     System.out.println("Dog(): " + this);
	     this.age=10;
	     this.sex=false;
	     //this.weight = 20;
	  }
	
	   /**
	   子类新增方法
	   */
    	public void Bark(){   
		//this.weight = 20;
		this.sex = false;
		System.out.println("Wang~~Wang~~~");
	
	    }
}

 public class Test{ //测试类
	private static Animal myAnimal; //定义一个父类引用变量myAnimal
	
	public static void main(String args[])
	{
		myAnimal = new Dog();   //父类引用变量指向子类对象 上转型

        
	   /**
	   谁定义,绑定谁
	   子类Dog类没有重写setWeight()方法,所以setWeight()方法动态绑定父类Aniaml
	   先通过隐式传递的this找到子类(Dog类)对象空间,在子类对象空间找weight,找不到就通过动态绑定找到父类,父类找到动态绑定的私有属性weight,赋值50
	   */
	    myAnimal.setWeight(50); //调用父类引用变量myAnimal指向的子类对象的setWeight()方法
		System.out.println("My Dog's Weight is"+ myAnimal.getWeight());
  	    //myAnimal.weight=100;
	   // myAnimal.Bark();
		//((Dog)myAnimal).Bark();   //引用变量myAnimal的类型(Animal)不变,引用变量的值(对象地址)造型  对象地址由父类Animal转换为子类Dog 下转型
	    //Dog dog=new Dog();
	    //dog.Bark();
	}
}

重载(Overload)与重写/覆盖(Override)

条件

  1. 重载在同一个类里,重写在两个类里(先继承,后重写);
  2. 重载可以多次,重写只能一次;

语法:

重载方法名相同 [参数签名不同]
#参数签名:参数类型,参数顺序,参数个数
重载两个方法的访问权限,返回值类型没有要求

结论:一个类当中不能有方法名相同,参数签名也相同的两个方法,不然会出错

使用场景

  1. 构造方法
  2. println方法
  3. 抽象方法可以重载为非抽象方法
  4. 主方法也能重载(虚拟机通过方法名和参数签名找主方法,所以主方法可以重载,但不推荐使用)
  5. 静态方法可以重载为非静态方法

调用机制

编译时期调用重写和重载方法——又叫静态多态/编译多态/静态联编

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值