`
incyanggan
  • 浏览: 32708 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

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(包含链接).


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics