Java——09——继承性

一:为什么要有继承性

1.减少代码冗余,提高代码复用性
2.便于功能的扩展
3.为之后多态性的使用,提供了前提

二:继承性的格式:class A extends B{}

A:子类,派生类
B:父类,超类,基类
一旦A继承父类B,子类A中就获取了父类B中声明的所有的结构,属性和方法
特别的,父类中声明private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构,只有因为封装性的影响,使得子类不能直接调用父类的结构而已
除此之外:子类继承父类之后,还可以定义自己所特有的属性或方法,实现功能的拓展

父类:
Person.java

package com.xx.study;

public class Person {
	
	String name;
	private int age;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Person() {}
	public Person(String name,int age) {
		this.name=name;
		this.age=age;
	}

	
	public void eat() {
		System.out.println("吃饭");
	}
	public void sleep() {
		System.out.println("睡觉");
	}
	
}

子类:
Student.java

package com.xx.study;

public class Student extends Person{
   String major;
   public Student() {}
   public Student(String name,int age,String major) {
	   this.name=name;
	   setAge(age);
	   this.major=major;
   }
   public void study() {
	   System.out.println("学习");
   }
}

测试类:PersonTest.java

package com.xx.study;

public class PersonTest {
  public static void main(String[] args) {
	Person p1=new Person();
	Student s1=new Student();
	s1.setAge(18);
	s1.study();
	System.out.println(s1.getAge());
	
}
   
}

三:继承性的规定

在这里插入图片描述

四:Object是所有类的父类

在这里插入图片描述

五:继承练习题

1.

在这里插入图片描述
ManKind.java

package com.xzx.contact;

public class ManKind {
	private int sex;
	private int salary;

	public ManKind() {
	}

	public ManKind(int sex, int salary) {
		this.sex = sex;
		this.salary = salary;
	}

	public int getSex() {
		return sex;
	}

	public void setSex(int sex) {
		this.sex = sex;
	}

	public int getSalary() {
		return salary;
	}

	public void setSalary(int salary) {
		this.salary = salary;
	}

	public void manOrWoman() {
		if (sex == 1) {
			System.out.println("man");
		} else if (sex == 0) {
			System.out.println("woman");
		}
	}

	public void employeed() {
		String jobInfo = (salary == 0) ? "no job" : "job";
		System.out.println(jobInfo);
	}
}

Kids.java

package com.xzx.contact;

public class Kids extends ManKind{
  private int yearsOld;
  public Kids() {}//空参构造器
  public Kids(int yearsOld) {//有参构造器
	  this.yearsOld=yearsOld;
  }
  public int getyearsOld() {
	  return yearsOld;
  }
  public void setyearsOld(int yearsOld) {
	  this.yearsOld=yearsOld;
  }
  
  public void printAge() {
	  System.out.println(yearsOld);
  }
  
  
  
}

KidsTest.java

package com.xzx.contact;

public class KidsTest {
	public static void main(String[] args) {
		Kids someKids = new Kids();
		someKids.setSalary(100000);
		System.out.println(someKids.getSalary());
		Kids someKids2 = new Kids(1);
		System.out.println(someKids2.getyearsOld());
	}

}

2:

在这里插入图片描述Circle.java

package com.xzx.contact;

public class Circle {
 private double radius;
  public Circle() {
	  radius=1;
  }
  public void setRadius(double radius) {
	  this.radius=radius; //和形参命名冲突所以要加this
  }
  public double getRadius() {
	  return radius;
  }
  public double findArea() {
	  return Math.PI*radius*radius;//这里不用加this.radius
  }

}

Cylinder.java

package com.xzx.contact;

public class Cylinder extends Circle {
	private double length;

	public Cylinder() {
		length = 1.0;
	}

	public void setLength(double length) {
		this.length = length;
	}

	public double getLength() {
		return length;
	}

	public double findVolume() {
		//return Math.PI * getRadius() * getRadius() * length;
		return findArea()*length;
	}
}


CylinderTest.java

package com.xzx.contact;

import javax.swing.text.html.CSS;

public class CylinderTest {
	public static void main(String[] args) {
		Cylinder cy = new Cylinder();
		cy.setRadius(2.1);
		cy.setLength(3.4);
		double area=cy.findArea();
		System.out.println(area);
		double volume=cy.findVolume();
		System.out.println(volume);
	}
}

六:子类对象的实例化过程

在这里插入图片描述

七:类的继承和super例题

在这里插入图片描述在这里插入图片描述Account.java

package com.xx.study1028;

public class Account {
	private int id;
	private double balance;
    private double annuallnterestRate;
    public Account(int id,double balance, double annuallnterestRate) {
    	this.id=id;
    	this.balance=balance;
    	this.annuallnterestRate=annuallnterestRate;
    }
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
	public double getAnnuallnterestRate() {
		return annuallnterestRate;
	}
	public void setAnnuallnterestRate(double annuallnterestRate) {
		this.annuallnterestRate = annuallnterestRate/12;
	}
    public void withdraw(double amount) {
    	if(amount<balance) {
    		balance-=amount;
    		return;
    	}
    	System.out.println("余额不足");
    }
    public void deposite(double amount) {
    	balance+=amount;
    }
}

AccountTest.java

package com.xx.study1028;

public class AccountTest {
	public static void main(String[] args) {
      Account acct=new Account(1122,20000, 0.0045);
      acct.withdraw(30000);
      System.out.println(acct.getBalance());
      acct.withdraw(2500);
      acct.deposite(3000);
      System.out.println("余额是"+acct.getBalance()+"月利率是"+acct.getAnnuallnterestRate()*100+"%");
	}
}

CheckAccount.java

package com.xx.study1028;

public class CheckAccount extends Account{
	private double overdraft;
	public CheckAccount(int id, double balance, double annuallnterestRate,double overdraft) {
		super(id, balance, annuallnterestRate);
		this.overdraft=overdraft;
	}
	public double getOverdraft() {
		return overdraft;
	}

	public void setOverdraft(double overdraft) {
		this.overdraft = overdraft;
	}
   
	public void withdraw(double amount){
		if(getBalance()>amount) {//余额足够消费
			//方式一:setBalance(getBalance()-amount);
			//方式二
			super.withdraw(amount);
		}else if(overdraft>=amount-getBalance()) {//透支余额+余额足够消费
			overdraft-=(amount-getBalance());
			setBalance(0);	
		}else {
			System.out.println("超过可透支限额");
		}
	}

	
}

CheckAccountTest.java

package com.xx.study1028;

public class CheckAccountTest {
	public static void main(String[] args) {
    CheckAccount ckAccount=new CheckAccount(1122, 20000, 0.045, 5000);
    ckAccount.withdraw(5000);
    System.out.println("余额是"+ckAccount.getBalance()+"可透支"+ckAccount.getOverdraft());
    ckAccount.withdraw(18000);
    System.out.println("余额是"+ckAccount.getBalance()+"可透支"+ckAccount.getOverdraft());
    ckAccount.withdraw(3000);
    System.out.println("余额是"+ckAccount.getBalance()+"可透支"+ckAccount.getOverdraft());
  
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值