[JAVA] 实现继承与继承的重写

目录

 程序中的继承

继承的实现

方法的重写,语法规则


在学习继承的实现前,我们需要先了解继承的概念和特点:

 程序中的继承
  • 一种类与类之间的关系
  • 使用已存在的类的定义作为基础建立新类
  • 新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类
  • 满足“A is a B”的关系,就可以形成继承关系
继承的实现

通过extends实现继承方法 

编写父类:

class Animal{
  //公共的属性和方法
}

编写子类,继承父类:

注:一个子类只有唯一的父类(只能继承一个父类)

(extends 父类名:必选参数,用于指定要定义的子类继承于哪个父类)

class Dog extends Animal{
    //子类特有的属性和方法
}
class Cat extends Animal{

}

通过编写一个动物类来实现简单的继承关系,建立两个包,此处父类命名为Animal,子类命名为Cat和Dog,调用测试类为Test。

在父类中我们定义公共属性,昵称,月份,品种,定义eat()的成员方法

package com.imooc.animal;

public class Animal {
  private String name;//昵称
  private int month;//月份
  private String species;//品种
  
  
  public Animal() {   //默认构造方法
	  
  }


public String getName() {
	return name;
}


public void setName(String name) {
	this.name = name;
}


public int getMonth() {
	return month;
}


public void setMonth(int month) {
	this.month = month;
}


public String getSpecies() {
	return species;
}


public void setSpecies(String species) {
	this.species = species;
}
  
//吃东西
public void eat() {
	System.out.println(this.getName()+"在吃东西");
}

}

定义Cat类,该类继承于父类Animal,既Cat类是Animal类的子类

package com.imooc.animal;

public class Cat extends Animal {
    private double weight;//体重
      
    public Cat() { //无参构造
    	  
    }

	public double getWeight() {
		return weight;
	}

	public void setWeight(double weight) {
		this.weight = weight;
	}
	//跑动的方法
	public void run() {
		System.out.println(this.getName()+"是一只"+this.getSpecies()+"的猫,它在快乐的奔跑");
	}
}

再定义Dog类,该类继承于父类Animal,既Dog类是Animal类的子类

package com.imooc.animal;

public class Dog extends Animal {
 private String sex;//性别
 public Dog(){
	 
 }
 public String getSex() {
	return sex;
 }
 public void setSex(String sex) {
	this.sex = sex;
 }
 
 public void sleep() {
	System.out.println(this.getName()+"是一只"+this.getMonth()+"月大 
 的"+"小"+this.getSex()+"狗,"+"它在睡觉。");
 }
 }

最后在Test类测试调用

package com.imooc.test;

import com.imooc.animal.Cat;  //ctrl+shift+o导包快捷键
import com.imooc.animal.Dog;

public class Test {

	public static void main(String[] args) {
       Cat one=new Cat();//创建Cat类的对象并为其分配内存
       one.setName("喵喵");
       one.setSpecies("中华田园猫");
       one.eat();
       one.run();
       System.out.println("================================");
       Dog two=new Dog();
       two.setName("黑子");
       two.setMonth(6);
       two.setSex("雌");
       two.eat();
       two.sleep();
       //子类可以无偿访问父类的非私有成员,而父类无法访问子类特有的成员
	}

}

运行结果: 

方法的重写 

以上Dog类的eat方法是调用父类实现的,如果我们不想沿用父类中的eat方法,而想有自己独立的eat()的方法,这里我们可以通过方法的重写实现

重写是指父子类的关系,当子类继承父类中所有可能被子类访问的成员方法时,如果子类的方法名与父类的方法名相同,那么子类就不能继承父类的方法。

此时,称为子类的方法重写了父类的方法,重写体现了子类补充或者改变父类方法的能力。通过重写,可以使一个方法在不同的子类中表现出不同的行为。

语法规则
  • 在有继承关系的子类中定义,重写父类当中的方法
  • 方法名相同,参数列表相同(参数顺序,个数,类型)都要与父类继承的方法相同
  • 与方法的参数名无关
  • 访问修饰符,访问范围需要大于等于父类的访问范围  ( private < 默认 < protected < public )
  • 当方法返回值是void或基本数据类型时,必须相同;当返回值是引用类型时,可以是父类或其子类

下面,在Dog类中重写父类的方法eat

package com.imooc.animal;

public class Dog extends Animal {
 private String sex;//性别
 public Dog(){
	 
 }
public String getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
 
public void sleep() {
	System.out.println(this.getName()+"是一只"+this.getMonth()+"月大的"+"小"+this.getSex()+"狗,"+"它在睡觉。");
}
public void eat() {  //重写父类的方法
	System.out.println(this.getName()+"这只狗很听话诶~");
}
}

运行结果:

我们看到,由于Dog类重写了父类的方法eat( ),所以执行的是子类的eat( )方法

但是Cat类没有重写父类的方法,所以执行的是父类中的eat( )方法

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值