一:为什么要有继承性
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());
}
}