JAVA中的继承和重写




1.1 继承的概述

在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。




1.2继承的格式&使用

在程序中,如果想声明一个类继承另一个类,需要使用extends关键字。

格式:

class子类 extends父类 {}



案例代码一:

 package com.itheima_01;
/*
 * 继承:多个类有共同的成员变量和成员方法,抽取到另外一个类中(父类),在让多个类去继承这个父类,我们的多个类就可以获取到父类中的成员了。
 * extends
 * 
 */
public class ExtendsDemo {
	public static void main(String[] args) {
		DotA1 d = new DotA1();
		d.start();
		
		LOL1 l = new LOL1();
		l.start();
	}
}

class Game1 {
	String name;
	double version;//版本号
	String agent;//代理商
	
	public void start() {
		System.out.println("游戏启动了");
	}
	
	public void stop() {
		System.out.println("游戏关闭了");
	}
}

class DotA1 extends Game1 {
	/*String name;
	double version;//版本号
	String agent;//代理商
	
	public void start() {
		System.out.println("游戏启动了");
	}
	
	public void stop() {
		System.out.println("游戏关闭了");
	}*/
}

class LOL1 extends Game1 {
	/*String name;
	double version;//版本号
	String agent;//代理商
	
	public void start() {
		System.out.println("游戏启动了");
	}
	
	public void stop() {
		System.out.println("游戏关闭了");
	}*/
	
}





1.3 继承的特点

在类的继承中,要注意以下以下一些问题,具体如下:
1,在java中,类只支持但继承,不允许多继承,也就是说一个类只能有一个直接父类。

这种情况是不合法的。

 class A{}

     class B{}

     class C extends A,B{}  // C类不可以同时继承A类和B



2、一个父类可以被多个子类继承,例如下面这种情况是允许的。

 class A{}

     class B extends A{}

     class C extends A{}   //B和类C都可以继承类A



3,java中类不可以多继承,但是可以多重继承

下面这种情况是允许的。

     class A{}

     class B extends A{}   //B继承类A,类B是类A的子类

     class C extends B{}   //C继承类B,类C是类B的子类,同时也是类A的子类



4、在Java中,子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以是另一个类的子类。例如上面的这种情况中,B类是A类的子类,同时又是C类的父类




案例代码

package com.itheima_01;
/*
 * Java中继承的特点:
 * 			Java语言只支持单一继承,只能继承一个父类(一个儿子只能有一个亲爹)
 * 			Java语言支持多层继承(一个儿子可以有一个亲爹,还可以有一个亲爷爷)
 * 
 */
public class ExtendsDemo2 {
	public static void main(String[] args) {
		LOL l = new LOL();
		l.update();
		l.start();
	}
}

class Game {
	public void start() {
		System.out.println("游戏启动了");
	}
}

class PCGame extends Game {
	public void update() {
		System.out.println("PCGame更新了");
	}
}

class MobileGame extends Game {
	public void update() {
		System.out.println("MobileGame更新了");
	}
}

class LOL extends PCGame {
	
}





1.4 继承中成员变量的特点

 A:子类只能获取父类非私有成员

  子父类中成员变量的名字不一样直接获取父类的成员变量

  子父类中成员变量名字是一样的获取的是子类的成员变量

  

 B:就近原则:谁离我近我 就用谁

  如果有局部变量就使用局部变量

  如果没有局部变量,有子类的成员变量就使用子类的成员变量

  如果没有局部变量和子类的成员变量,有父类的成员变量就使用父类的成员变量


 C: super:可以获取父类的成员变量和成员方法,用法和this是相似的




案例代码

package com.itheima_01;
/*
 * 继承中成员变量的特点
 * 		子类只能获取父类非私有成员
 * 		子父类中成员变量的名字不一样直接获取父类的成员变量
 * 		子父类中成员变量名字是一样的获取的是子类的成员变量
 * 
 * 就近原则:谁离我近我就用谁
 * 		如果有局部变量就使用局部变量
 * 		如果没有局部变量,有子类的成员变量就使用子类的成员变量
 * 		如果没有局部变量和子类的成员变量,有父类的成员变量就使用父类的成员变量
 * 		啥都没有,出错了!!!
 * 
 * super:可以获取父类的成员变量和成员方法,用法和this是相似的
 */
public class ExtendsDemo3 {
	public static void main(String[] args) {
		Kid3 k = new Kid3();
		k.show();
	}
}

class Dad3 {
	String name = "建霖";
}

class Kid3 extends Dad3 {
	String name = "四葱";
	
	public void show() {
		String name = "五葱";
		
		System.out.println(super.name);
		System.out.println(this.name);
		System.out.println(name);
	}
}






案例代码四

子类中重写了这个方法,调用子类的

    方法的重写:在子父类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法

  package com.itheima_01;
/*
 * 继承中成员方法的特点
 * 		子类中没有这个方法,调用父类的
 * 		子类中重写了这个方法,调用子类的
 * 
	方法的重写:在子父类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法
 	方法的重载:在一个类中,有多个重名的方法,但是其参数不一样(参数的个数,参数的类型,参数的顺序),和返回值无关
 
 */
public class ExtendsDemo4 {
	public static void main(String[] args) {
		Kid4 k = new Kid4();
		k.eat();
	}
}

class Dad4 {
	public void eat() {
		System.out.println("小酌两口");
		System.out.println("去睡觉了");
	}
}

class Kid4 extends Dad4 {
	public void eat() {
		System.out.println("好好吃饭");
	}
}







  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值