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());
  
	}
}

猜你喜欢

转载自blog.csdn.net/x1037490413/article/details/109255053