Java菜鸟学习笔记--面向对象篇(七):简易继承

本文详细介绍了Java中的继承概念,包括继承的基本语法、子类构造过程及父类私有方法的继承特性等内容。

什么是继承?

  • 现实世界中,儿子继承老爹的东西。
  • 面向对象世界里,一个类(子类)继承另外一个类(父类)的数据成员和方法。
  • Java只支持单继承,一个儿子只有一个爹。而C++支持多继承。




为什么要用继承?

  • 面向对象的终极目标就是要减少应用程序中的重复代码,继承也可以减少应用程序中的程序代码
  • 便于修改


继承的语法表示是什么?


1.用Son类继承Person类,表示出继承成功


class Person{
	
	Strsing name;
	int age;


     	public void eat(){
		
		System.out.println("我在吃饭");
	}
	public void introduce(){

		System.out.println("你好我的名字: "+name+"我的年龄:"+age);
	}

}
class Son extends Person{

	//Son 为Person的子类	
	//Son  内未定义任何方法	
}
public class test{

	public static void main(String[] agrs){
		//用Son测试是否继承了Person类。
		Son yanggan=new Son();
		yanggan.name="yanggan";
		yanggan.age=21;
		yanggan.introduce();

		/*输出
		你好我的名字: yanggan我的年龄:21
		*/
		
	}

}


生成子类的过程?


class Person{
	
	String name;
	int age;
	Person(){
		System.out.println("Person 无参构造函数");	
	}
	Person(String name,int age){
		this.name=name;
		this.age=age;
		System.out.println("Person 有参构造函数");
	}
     	public void eat(){
		
		System.out.println("我在吃饭");
	}
	public void introduce(){

		System.out.println("你好我的名字: "+name+"我的年龄:"+age);
	}
	public static void talk(String word){
		System.out.println(word);

	}
}
//Person的子类 Son
class Son extends Person{

	String school;
	//1.子类Son不能继承父类构造函数!
	//2.在子类的构造函数中,必须调用父类的构造函数!!为什么?
	/*
		

	*/
	Son(){
		super();//3.不写出来,编译器自动添加这行代码
		//super表示调用父类的构造函数
		System.out.println("Son 无参构造函数");
	}
	Son(String name,int age,String school){
		//4.头两行为重复代码,如何解决?--能调用父类构造函数就好了		
		//this.name=name;
		//this.age=age;
		
		super(name,age);//5.super调用父类的构造函数,又参数决定用哪一个!		
		this.school=school;

	}	
}
public class test{

	public static void main(String[] agrs){
		//创建Son的对象
		Person.talk("---------new Son()-------------");
		Son yanggan=new Son();
		Person.talk("----------new Son(有参数)--------");
		Son wangtao=new Son("wangtao",21,"HUT");
		wangtao.introduce();//6.怎么打印学校呢?
		
	}

}



父类Private方法的继承问题



1.测试声明为private的超类方法,在子类中用复写的语法写会怎么样?


//1.测试声明为private的超类方法,在子类中用复写的语法写会怎么样?
package me.privateandfinal;
class Father{
	
	private void eat(){
		
		System.out.println("老爹在吃饭");
	}
	private final void sleep(){
		System.out.println("老爹在睡觉");
	}
	
}
class Son extends Father{
	
	//~ @Override
	//~ public  void eat(){
		//~ System.out.println("这算复写老爹的方法");
	//~ }//编译错误
	/*输出:
	: method does not override or implement a method from a supertype
	@Override
	^
	1 error
	*///编译器指出并未发现有复写父类方法,所以void eat()不算复写。即这是一个新方法
	
	private final void sleep(){
		System.out.println("儿子在睡觉");
	}//还是新方法
	
	
}
public class TestPrivateandFinal{
	
	public static void main(String[] arga){
		
	Son coco=new Son();
	
	//coco.eat();//对于Son类,这个新方法可以访问,与父类的eat()方法无半毛钱关系
		
	}
	
}




作者:YangGan
本文基于 署名 2.5 中国大陆 许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan (包含链接).


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值