Java继承

继承的概念
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。继承需要符合的关系:is-a,父类更通用,子类更具体。
生活中的继承
食草动物和食肉动物属于动物类,兔子和羊属于食草动物类,狮子和豹属于食肉动物类。他们都有动物的一般性,但也有属于自己的行为等特性。所以子类会具有父类的一般特性也会具有自身的特性。
类的继承格式

class 父类 {
}
 
class 子类 extends 父类 {
}

继承的特性
子类拥有父类非private的属性,方法。
子类继承父类除构造函数之外的其他数据成员及方法
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法。
Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类。
为什么需要继承
猫类:属性(姓名,id),方法(吃,睡,自我介绍)

	public class cat {
		private String name;
		private int id;
		public cat(String name,int id) {
			this.name = name;
			this.id = id;
		}
		public void eat(){
			System.out.println(name+"正在吃!");
		}
		public void sleep(){
			System.out.println(name+"正在睡觉!");
		}
		public void introduce(){
			System.out.println("大家好,我是"+name+"我的ID是"+id);
		}
	}

狗类:属性(姓名,id),方法(吃,睡,自我介绍)

	public class dog {
		private String name;
		private int id;
		public dog(String name,int id) {
			this.name = name;
			this.id = id;
		}
		public void eat(){
			System.out.println(name+"正在吃!");
		}
		public void sleep(){
			System.out.println(name+"正在睡觉!");
		}
		public void introduce(){
			System.out.println("大家好,我是"+name+"我的ID是"+id);
		}
	}

很显然代码存在冗余,要从根本上解决这两段代码的问题,就需要继承,将两段代码中相同的部分提取出来组成 一个父类:动物类

	public class Animal {
		private String name;
		private int id;
		public Animal(String name,int id) {
			this.name = name;
			this.id = id;
		}
		public void eat(){
			System.out.println(name+"正在吃!");
		}
		public void sleep(){
			System.out.println(name+"正在睡觉!");
		}
		public void introduce(){
			System.out.println("大家好,我是"+name+"我的ID是"+id);
		}
	}

这个Animal类就可以作为一个父类,然后企鹅类和老鼠类继承这个类之后,就具有父类当中的属性和方法,子类就不会存在重复的代码,维护性也提高,代码也更加简洁,提高代码的复用性
继承的代码:
猫类:

	public class cat extends Animal {
		public cat(String name,int id){
			super(name,id);
		}
	}

狗类:

	public class dog extends Animal {
		public dog(String name,int id){
			super(name,id);
		}
	}

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
super(参数列表) 调用父类的构造函数。

		super(name,id);

四种修饰符的访问权限:
这里写图片描述
重载:函数名相同,参数不同(返回值无要求)
例如:

		public  void show(){
			System.out.println("======");
		}
		public  void show(int i){
			System.out.println("==="+i);
		}

调用这两个show函数,这两个show函数都会被执行。
重写: 也叫覆盖,函数名相同,参数列表相同(返回值相同) 。因为子类会继承父类的方法,而重写就是将从父类继承过来的方法重新定义一次,重新填写方法中的代码。重写一般是指父类和子类之间,子类重写了父类的一个方法,当然方法名是一样的,而且不能改变父类方法的返回值,比如说父类是返回String,子类重写了这个方法,想返回一个int,那是不行的,也得返回String。子类方法的修饰符也不可以小于父类方法的修饰符。如果父类方法抛异常,子类方法抛的异常不能大于父类方法抛的异常。如果符类方法是static的子类也必须是,如果父类不是static的子类也不可以是。如果父类方法是private的,在子类中写同名方法不构成重写,返回值等可以随意写。

		public  void show(){
			System.out.println("======");
		}
		public  void show(){
			System.out.println("!!!!");
		}

调用这两个show函数只会执行后一个show函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值