JavaSE--继承

发布时间 2023-08-09 10:20:30作者: 洛小依ovo

一、继承extends

1、继承的作用

  基本作用:子类继承父类,代码可以得到复用

  主要作用:因为有了继承关系,才有了后期的方法覆盖和多态机制

2、继承的语法结构

class 类名 extends 父类名{
    类体;
}
// 使用继承机制来解决代码复用问题。
// 继承也是存在缺点的:耦合度高,父类修改,子类受牵连。
public class ExtendsTest02{
	public static void main(String[] args){
		// 创建普通账户
		Account act = new Account();
		act.setActno("1111111");
		act.setBalance(10000);
		System.out.println(act.getActno() + ",余额" + act.getBalance());

		// 创建信用账户
		CreditAccount ca = new CreditAccount();
        // 这两个方法子类从父类继承过来的
		ca.setActno("2222222");
		ca.setBalance(-10000);
		ca.setCredit(0.99);
		System.out.println(ca.getActno() + ",余额" + ca.getBalance() + ",信誉度" + ca.getCredit());
	}
}

// 银行账户类
// 账户的属性:账号、余额
class Account{ // 父类
	// 属性
	private String actno;// 私有的也是可以继承的,只是子类中无法直接访问
	private double balance;

	// 构造方法
	public Account(){
	
	}
    // 除了构造方法 其他的都会继承
	public Account(String actno, double balance){
		this.actno = actno;
		this.balance = balance;
	}

	// setter and getter
	public void setActno(String actno){
		this.actno = actno;
	}
	public String getActno(){
		return actno;
	}
	public void setBalance(double balance){
		this.balance = balance;
	}
	public double getBalance(){
		return balance;
	}
}

// 其它类型的账户:信用卡账户
// 账号、余额、信誉度
class CreditAccount extends Account{ //子类

	// 属性
	private double credit;

	// 构造方法
	public CreditAccount(){
	
	}

	public void doSome(){
		//错误: actno 在 Account 中是 private 访问控制
		//System.out.println(actno);
		// 间接访问
		//System.out.println(this.getActno());
		System.out.println(getActno());
	}

	// setter and getter方法
	public void setCredit(double credit){
		this.credit = credit;
	}
	public double getCredit(){
		return credit;
	}
	
}

3、继承的相关特性

  1)B类继承A类,则称A类为超类(superclass)、父类、基类,B类则称为子类(subclass)、派生类、扩展类。
  2)java 中的继承只支持单继承,不支持多继承,C++中支持多继承,这也是 java 体现简单性的一点,换句话说,java 中不允许这样写代码:class B extends A,C{ } 这是错误的。
  3)虽然 java 中不支持多继承,但有的时候会产生间接继承的效果
例如:class C extends B,class B extends A,也就是说,C 直接继承 B,其实 C 还间接继承 A。
  4)java 中规定,子类继承父类,除构造方法不能继承之外,剩下都可以继承。但是私有的属性无法在子类中直接访问。
(父类中private修饰的不能在子类中直接访问。可以通过间接的手段来访问。)
  5)java 中的类没有显示的继承任何类,则默认继承 Object类,Object类是 java 语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有 Object类型中所有的特征。
  6)继承也存在一些缺点,例如:CreditAccount 类继承 Account 类会导致它们之间的耦合度非常高,Account 类发生改变之后会马上影响到 CreditAccount 类

4、什么时候使用继承

  凡是采用“is a”能描述的都可以继承
  例如:Cat is a Animal猫是一个动物
     Dog is a Animal狗是一个动物
     CreditAccount is Account......
 

二、Object类

1、Object类提供了哪些方法

  1)Java内置了一套庞大的类库,我们可以基于类库进行二次开发,也就是jdk内置的类库实现了很多基础的功能,例如:String是sun编写的字符串类、System是sun编写的系统类
  2)jdk源代码位置:jdk文件目录下lib下的src文件夹
  3)当源码中的一个方法以“;”结尾,并且修饰符列表中有“native”关键字,表示底层调用c++写的dll程序(dll动态链接库文件)
// Object类中的一个方法
private static native void registerNatives();
   5)equals方法
public boolean equals(Object obj){
    return (this == obj);
}
  4)toString方法
public String toString(){
    return getClass().getName() + "@" + Integer.toHexString(jashCode());
}
// 如果使用System.out.println()这个方法输出一个引用的话
System.out.println(引用类型);
// 底层会自动调用toString方法,输出toString方法的结果