Java学习笔记---13.面向对象编程08-Java中继承的概念,子类实例化过程,super()及方法复写
Posted on 2010-09-20 13:51 notifier 阅读(3324) 评论(0) 编辑 收藏 举报
继承是OOP的三大特点之一. 这一节主要做一下继承的笔记.
1. 继承的概念及使用
在Java中,通过继承可以简化类的定义,扩展类的功能. Java中支持类的单继承和多层继承,但是不支持多继承,即: 一个类只能继承一个类而不能继承多个类.
实现继承的格式为: class 子类名 extends 父类
Java中继承只能直接继承父类中的公有属性和公有方法,而隐含地(不可见地)继承了私有属性. 继承的内容如下图:
2. 子类对象的实例化过程
子类对象在实例化时,需要注意的是: 子类对象实例化会默认先调用父类中的无参构造函数,然后再调用子类构造方法. 例如下面的实例代码:
这里有一点挺有意思的,如果父类没有无参构造函数,则子类的实例化就会报错~~
class Person { private String name; private int age; //父类的无参构造方法 public Person() { System.out.println("========父类中的构造方法========"); } //getter和setter方法 public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } //返回信息方法 public String getInfo() { return "姓名是: "+name+",年龄是: "+age; } } class Student extends Person { private String school = "软件学院"; //子类的无参构造方法 public Student() { setName("newsainton"); setAge(23); System.out.println("========子类中的构造方法========"); } public void print() { System.out.println(getInfo()+",学校是:"+school); } } public class Demo01 { public static void main(String args[]) { // 使用子类对象 Student s = new Student() ; s.print(); } }
3. super()方法和类方法复写机制
3.1 super()方法
在上面的实例中, 实际上在子类Student的构造方法中隐含了一个super()的方法. 该方法表示调用父类(即超类)的构造方法. 需要注意的是,我们也可以使用super(参数类型 参数名, 参数类型 参数名, ...)这样的格式来调用父类重载后的含参构造方法. 下面的例子中用到了这种super方法.
3.2 子类对父类方法的复写
子类可以继承父类的方法,也可以复写父类的方法. 但复写父类的方法有一个基本的前提: 所复写的方法不能有比父类方法更严格的访问权限. (访问权限 public > default > private)
这里举一个程序的例子,在该例子中, 子类Student以super(name,age)的形式调用父类的构造方法,同时子类以不变的权限复写了父类的getInfo()方法:
class Person { private String name ; private int age ; // 希望在调用Person类的构造方法的时候可以直接为属性初始化 public Person(String name,int age) { this.setName(name) ; this.setAge(age) ; } // 私有属性要加入setter和getter操作就可以访问了 public void setName(String name) { this.name = name ; } public void setAge(int age) { this.age = age ; } public String getName() { return this.name ; } public int getAge() { return this.age ; } public String getInfo() { return "姓名 = "+this.name+",年龄 = "+this.age ; } } // 与Person类相比是扩充了Person类的功能,所以此处继承即可 class Student extends Person { private String school ; public Student(String name,int age,String school) { //super() ; //--> 隐含的代码 // 此时最好可以明确的指出要调用父类中的有两个参数的构造方法 // 直接指明调用父类中有两个参数的构造方法。 super(name,age) ; this.setSchool(school) ; } public void setSchool(String school) { this.school = school ; } public String getSchool() { return this.school ; } // 子类覆写了父类中的getInfo()方法 public String getInfo() { // 调用父类中的getInfo()方法,使用super.方法名()的格式 return super.getInfo()+",学校 = "+this.school ; } } public class Demo02{ public static void main(String args[]) { // 使用子类对象 Student s = new Student("newsainton",23,"软件学院") ; System.out.println(s.getInfo()) ; } }
常遇困境,说明你在进步!
常有压力,说明你有目标!
作者:notifier
出处:http://www.cnblogs.com/notifier/
本文版权归作者notifier和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利!