Java入门——继承详解

关于Java语言中的继承

  • 继承是面向对象的三大特征之一,三大特征分别是:封装、继承和多态

  • 继承“基本”的作用是代码复用,但是继承做最重要的作用是:有了继承才有了以后的方法覆盖和多态

  • 继承语法格式:
    [修饰符列表] class 类名 extends 父类名{
    类体=属性+方法;
    }

  • java语言当中的继承只支持单继承,一个类不能同时继承多个父类,只能继承一个父类,在C++中支持多继承

  • 关于继承的一些术语
    B类继承A类,其中:

    A类称为:父类、基类、超类、superclass
    B类称为:子类、派生类、subclass

  • 在Java语言中子类都继承了父类哪些数据呢?
    C extends B{
    }

    B extends A{
    }

    A extends T{
    }

    C类直接继承B类,但是C类间接继承A类、T类

  • Java语言中假设一个类并没有显示继承任何类,该类默认继承javase类库当中提供的java.lang.Object类。Java中任一个类都有Object类的特征。

public class ExtendsTest {

	public static void main(String[] args) {

		ExtendsTest et=new ExtendsTest();
		String s=et.toString();//这里编译通过,说明确实继承Object类
		System.out.println(s);//com.bjpowernode.javase.test012.ExtendsTest@1f32e575
		
		CreditAccount act=new CreditAccount();
		act.setActno("act-001");
		act.setBalance(-1000.0);
		act.setCredit(0.99);
		
		System.out.println(act.getActno()+","+act.getBalance()+","+act.getCredit());
		
		
		
	}

}

package com.bjpowernode.javase.test012;

public class Account {

	private String actno;
	private double balance;
	
	public Account() {
		super();
	}

	public Account(String actno, double balance) {
		super();
		this.actno = actno;
		this.balance = balance;
	}

	public String getActno() {
		return actno;
	}

	public void setActno(String actno) {
		this.actno = actno;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}
	
	
}

package com.bjpowernode.javase.test012;

public class CreditAccount extends Account {

	private double credit;
	
	public CreditAccount() {
		super();
	}
	
	public double getCredit() {
		return credit;
	}
	
	public void setCredit(double credit) {
		this.credit = credit;
	}
	
	
	
}

package com.bjpowernode.javase.test012;

public class ExtendsTest2 {

	public static void main(String[] args) {

		C c=new C();
		c.doSome();//调用的是从B类里继承过来的doSome
		
	}

}

class A{
	public void doSome() {
		System.out.println("do some!");
	}
}

class B extends A{
	
}

class C extends B{
	
}

回顾Java语言中的方法重载

  • 方法重载又被称为:overlord

  • 方法重载什么时候使用?
    当在同一个类当中,方法完成的功能时是相似的,建议方法名相同,这样方便程序员的编程,就像在调用一个方法一样,代码美观。

  • 什么条件满足之后构成方法重载?
    在同一类当中
    方法名相同
    形式参数列表不同【个数、类型、顺序】

  • 方法重载和什么无关?
    和修饰符列表无关
    和返回值类型无关

关于java语言中的方法覆盖

  • 方法覆盖又被称为方法重写,英语单词:override【官方名称】/overwrite

  • 什么时候使用方法覆盖?
    当父类中的方法已经无法满足子类中的业务需求
    子类必须将从父类中继承过来的方法进行重新编写
    这个重新编写的过程被称为方法的覆盖

  • 什么条件满足时会发生方法覆盖【代码满足什么条件时,就构成方法覆盖】

    方法覆盖发生在具有继承关系的父子类中
    方法覆盖的时候:返回值类型相同,方法名相同,形参列表相同
    方法覆盖的时候:访问权限不能更低,可以更高
    方法覆盖的时候:抛出异常不能更多,可以更少

  • 建议方法覆盖的时候,直接复制黏贴,防止出错,导致覆盖的不发生。

  • 注意:

    私有方法不能继承,当然也不会发生方法覆盖
    构造方法不能继承,当然也不会发生方法覆盖
    静态方法不存在继承,当然也不会发生方法覆盖【理解多态后就明白了】
    覆盖只针对方法,不针对属性

public class OverrideTest01 {

	public static void main(String[] args) {

		//创建动物对象
		Animal a=new Animal();
		a.move();
		
		//创建猫对象
		Cat c=new Cat();
		c.move();
		
		//创建鸟对象
		Bird b=new Bird();
		b.move();
		
		//创建鹦鹉对象
		Yingwu y=new Yingwu();
		y.move();
		
		//鹦鹉类继承的是鸟类
		//鸟类继承的是动物类,但存在方法覆盖,鸟儿在飞翔!
		//所以鹦鹉类的方法覆盖只会对鸟类的方法发生覆盖,并不会对动物类发生覆盖
		//去除方法覆盖,也只会输出 鸟儿在飞翔!
		
	}

}


//动物类
public class Animal {

	//动物都会移动
	//实例方法
	public void move() {
		System.out.println("动物在移动");
	}
}


//猫科动物类
public class Cat extends Animal {

	public void move() {
		System.out.println("猫咪在走猫步!");
	}

	
}


//鸟类
public class Bird extends Animal {

	public void move() {
		System.out.println("鸟儿在飞翔!");
	}

	
}

//鹦鹉类
public class Yingwu extends Bird {

	public void move() {
		System.out.println("鹦鹉飞不起来!");
	}
	

下一篇:多态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值