Java-09-Herencia

Uno: ¿Por qué debería haber herencia?

1. Reducir la redundancia de código y mejorar la reutilización del código
2. Facilitar la expansión de funciones
3. Proporcionar un requisito previo para el uso posterior del polimorfismo

Dos: formato de herencia: la clase A se extiende a B {}

A: subclase, clase derivada
B: clase principal, superclase, clase base
Una vez que A hereda la clase principal B, la subclase A obtiene todas las estructuras, propiedades y métodos declarados en la clase principal B.
Especial, en la clase principal Declare propiedades o métodos privados. Después de que la subclase hereda la clase principal, todavía piensa que ha adquirido la estructura privada en la clase principal. Solo debido al impacto de la encapsulación, la subclase no puede llamar directamente a la estructura de la clase principal.
Además: subclase Después de heredar la clase principal, también puede definir sus propios atributos o métodos únicos para lograr una expansión funcional

Clase padre:
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("睡觉");
	}
	
}

Subclase:
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("学习");
   }
}

Clase de prueba: 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());
	
}
   
}

Tres: disposiciones sobre herencia

Inserte la descripción de la imagen aquí

Cuatro: el objeto es la clase principal de todas las clases

Inserte la descripción de la imagen aquí

Cinco: ejercicios de herencia

1.

Inserte la descripción de la imagen aquí
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:

Inserte la descripción de la imagen aquí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);
	}
}

Seis: el proceso de instanciación de objetos de subclase

Inserte la descripción de la imagen aquí

Siete: herencia de clases y súper ejemplos

Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí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());
  
	}
}

Supongo que te gusta

Origin blog.csdn.net/x1037490413/article/details/109255053
Recomendado
Clasificación