Java 面向对象(继承) (第十八天)

继承的概念:

      多个类中相同的属性和方法抽取出来放入到一个新的类中(父类)

      多个类中就不需要再重复定义这些属性和方法,只需要写自己类中独有的属性和方法,使用            extends关键字继承父类就可以使用父类中的属性和方法

继承是Java中实现代码重用的重要手段之一。Java中只支持单根继承,即一个类只能有一个直接父类

如何使用继承:

语法:(父类)

[访问修饰符] class Pet { 
    //公共的属性和方法
}

编写子类,继承父类

[访问修饰符] class Dog extends Pet { 
    //子类特有的属性和方法

 

子类访问父类成员

访问父类构造方法:
super();    
super(name);

访问父类属性:
super.name;

访问父类方法
super.print();

(1)使用super关键字,super代表父类对象 
(2)在子类构造方法中调用且必须是第一句
(3)不可以访问父类中定义为private的属性和方法

super关键字 

 super关键字来访问父类的成员:
          1)super只能出现在子类的方法和构造方法中
          2)super调用构造方法时,只能是第一句
          3) super不能访问父类的private成员

 继承条件下构造方法的调用

◆继承条件下构造方法的调用规则:

       ■子类构造方法没有通过super显式调用父类的有参构造
          方法,也没通过this显式调用自身其他构造方法
               ●系统默认调用父类的无参构造方法

       ■子类构造方法通过super显式调用父类的有参构造方法。
               ●执行父类相应构造方法,而不执行父类无参构造方法

       ■子类构造方法通过this显式调用自身的其他构造方法,
       在相应构造方法中应用以上两条规则

 子类可以继承父类的哪些资源:

    1)pubic修饰的资源、
    2)可以继承与子类在同一个包中的默认修饰符修饰的资源
    3)可以继承protected修饰的资源,不管父类与子类在不在同一个包中

    4)不能继承父类里使用private修饰的资源
    5)不能继承父类的构造方法

 何时使用继承?

 ■继承与真实世界类似
      ●只要说“猫是哺乳动物”,猫的很多属性、行为就
         不言自明了
      ●藏獒是一种狗
    (符合is-a关系的设计使用继承)
   ■继承是代码重用的一种方式
        (将子类共有的属性和行为放到父类中)

继承有何好处:

  方便修改代码,减少代码量 

代码:

父类

package Exercises;

public class Pet {	
	//定义属性,使用private修饰符进行封装
	private String name;//名字
	private int health;//健康值
	private int love;//亲密度
	
	//无参构造方法
	public Pet() {
	}

	//有参构造方法
	public Pet(String name, int health, int love) {
		super();
		this.name = name;
		this.health = health;
		this.love = love;
	}

	//get、set方法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	public int getHealth() {
		return health;
	}
	public void setHealth(int health) {
		this.health = health;
	}

	public int getLove() {
		return love;
	}
	public void setLove(int love) {
		this.love = love;
	}
	
	//定义方法输出对象信息
	public void printInfo(){
		System.out.println("宠物昵称:"+this.getName()+" "+"健康值:"+this.getHealth()+" "+"亲密度:"+this.getLove());
	}
	
}

Cat子类   1

package Exercises;

public class Cat extends Pet {
	
	//定义Cat类独有属性
	private String color;

	public Cat() {
		super();//调用父类Pet类里的无参构造方法
	}

	public Cat(String name, int health, int love, String color) {
		super(name, health, love);
		this.color = color;
	}

	
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	
}

Dog子类    2

package Exercises;

public class Dog extends Pet{
	//strain为Dog类独有属性,其余类没有,所以在Dog类里定义
	private String strain;

	//无参构造方法
	public Dog() {
	}

	//有参构造方法
	public Dog(String name, int health, int love, String strain) {
		super(name, health, love);
		this.strain = strain;
	}

	//get、set方法
	public String getStrain() {
		return strain;
	}
	public void setStrain(String strain) {
		this.strain = strain;
	}	
}

 Penguin子类   3

package Exercises;

public class Penguin extends Pet {

	//定义Penguin类里独有的属性
	private String sex;//性别

	public Penguin() {
		super();//super表示父类Pet对象,所以这个地方表示调用父类的无参构造方法
	}

	//有参构造方法
	public Penguin(String name, int health, int love, String sex) {
		super(name, health, love);//表示调用父类Pet类的有参构造方法
		this.sex = sex;
	}

	
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public void aa(){
		System.out.println("宠物昵称:"+getName()+" "+" 健康值:"+getHealth()+" "+" 亲密度:"+getLove()+" 性别:"+getSex());
	}	
}

对象

package Exercises;

public class Test {

	public static void main(String[] args) {
		// 创建Dog类对象
		Dog dog1=new Dog("小黑", 89, 78, "哈士奇");
		//在Dog类中没有setName( )方法,但是DOg类对象dog1是可以调用,因为Dog类继承了Pet类,所以dog1可以调用父类Pet类里的setName( )方法
		dog1.setName("二傻");
		dog1.printInfo(); 
		
		//创建Penguin类对象
		Penguin Pen1=new Penguin("Q宠",78,98,"雄");
		Pen1.setHealth(100);
		Pen1.setName("企鹅");
		Pen1.aa();
		
		//创建Cat类对象
		Cat cat1=new Cat("汤姆", 99, 97, "白色");
		cat1.printInfo();
		
		
	}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值