Java菜鸟学习笔记--面向对象篇(七):简易继承
2013-07-16 18:49
633 查看
什么是继承?
现实世界中,儿子继承老爹的东西。面向对象世界里,一个类(子类)继承另外一个类(父类)的数据成员和方法。
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
出处:http://blog.csdn.net/incyanggan
本文基于署名
2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan(包含链接).
相关文章推荐
- Java菜鸟学习笔记--面向对象篇(十四):继承与组合
- Java菜鸟学习笔记--面向对象篇(十五):Wrapper Class包装类
- Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态
- Java菜鸟学习笔记--面向对象篇(五):方法
- Java菜鸟学习笔记()--面向对象篇(七):Wrapper Class包装类
- Java菜鸟学习笔记--面向对象篇(十三):interface
- Java菜鸟学习笔记--面向对象篇(一):类的定义
- Java菜鸟学习笔记--面向对象篇(三):构造器&重载
- Java菜鸟学习笔记--面向对象篇(八):成员变量和局部变量
- Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态
- Java菜鸟学习笔记--面向对象篇(十五):Wrapper Class包装类
- Java菜鸟学习笔记--面向对象篇(十一):&abstract方法/类
- Java菜鸟学习笔记--面向对象篇(十二):Package简单理解
- Java菜鸟学习笔记--面向对象篇(十):有爱的打印机实例
- Java菜鸟学习笔记--面向对象篇(六):static修饰符
- Java菜鸟学习笔记--面向对象篇(九):Oerride与super限定
- Java菜鸟学习笔记--面向对象篇(十七):Final修饰符
- Java菜鸟学习笔记--面向对象篇(四):This指针
- Java菜鸟学习笔记--面向对象篇(四):This指针
- 黑马程序员—4—Java基础: 面向对象继承学习笔记和学习心得体会