继承是OOP的三大特点之一. 这一节主要做一下继承的笔记.
1. 继承的概念及使用
在Java中,通过继承可以简化类的定义,扩展类的功能. Java中支持类的单继承和多层继承,但是不支持多继承,即: 一个类只能继承一个类而不能继承多个类.
实现继承的格式为: class 子类名 extends 父类
Java中继承只能直接继承父类中的公有属性和公有方法,而隐含地(不可见地)继承了私有属性. 继承的内容如下图:
--------------------------------------------------------------------------------
2. 子类对象的实例化过程
子类对象在实例化时,需要注意的是: 子类对象实例化会默认先调用父类中的无参构造函数,然后再调用子类构造方法. 例如下面的实例代码: view plaincopy to clipboardprint?
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();
}
}
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()方法: view plaincopy to clipboardprint?
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()) ;
}
}
1. 继承的概念及使用
在Java中,通过继承可以简化类的定义,扩展类的功能. Java中支持类的单继承和多层继承,但是不支持多继承,即: 一个类只能继承一个类而不能继承多个类.
实现继承的格式为: class 子类名 extends 父类
Java中继承只能直接继承父类中的公有属性和公有方法,而隐含地(不可见地)继承了私有属性. 继承的内容如下图:
--------------------------------------------------------------------------------
2. 子类对象的实例化过程
子类对象在实例化时,需要注意的是: 子类对象实例化会默认先调用父类中的无参构造函数,然后再调用子类构造方法. 例如下面的实例代码: view plaincopy to clipboardprint?
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();
}
}
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()方法: view plaincopy to clipboardprint?
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()) ;
}
}
发表评论
-
Servlet
2010-08-20 11:28 4901.什么是Servlet? ... -
MyEclipse快捷键
2010-08-20 11:27 518存盘 Ctrl+s(肯定知道) 注释代码 Ctrl+/ 取 ... -
java面试题
2010-08-20 11:26 470第一,谈谈final, finally, finalize的区 ... -
Java学习笔记---16.面向对象编程11-Java多态性,instanceof及Object类
2010-08-20 11:26 686多态是一个之前一直搞不清楚的概念,通过这次笔记,对多态的概念及 ... -
Java学习笔记---15.面向对象编程10-Java中final关键字,抽象类与接口
2010-08-20 11:24 931抽象类与接口是Java中最重要部分之一,这里用较大的篇幅来做下 ... -
Java学习笔记---14.面向对象编程09-Java中重载与复写的区别、super与this的比较
2010-08-20 11:22 8161. 方法重载与方法复写的区别 区别 ... -
Java学习笔记---12.面向对象编程07-Java中的static关键字用法
2010-08-20 11:08 842static关键字应用点有3个: static变量(属性)的声 ... -
Java学习笔记---11.面向对象编程06-Java的内部类及对象数组
2010-08-20 11:04 8241. Java的内部类机制 所谓内部类,是指在一 ... -
java学习笔记---10.面向对象编程05-面向对象程序的设计步骤
2010-08-20 11:03 761这一部分需要注意一个原则, 熟练掌握OOP的程序设计方法. ... -
Java学习笔记---9.面向对象编程04-this关键字的使用
2010-08-20 11:00 725Java学习笔记---9.面向对象编程04-this关键字的使 ... -
Java学习笔记---8.面向对象编程03-String类的重点应用
2010-08-20 10:59 690在String类这一部分很重要,分为三个问题来做笔 ... -
Java学习笔记---7.面向对象编程02-类的封装性以及构造方法
2010-08-20 10:57 7871. 类的封装特性: 类的封装性是指类 ... -
Java学习笔记---6.面向对象编程01-类对象的构建及对象的引用传递
2010-08-20 10:54 662Java学习笔记---6.面向对象编程01-类对象的构建及对象 ... -
Java学习笔记---5.Java数组和方法
2010-08-20 10:53 7101. 数组的声明语法 Java中数组的声明有两种形 ... -
Java学习笔记---4.Java的分支循环语句
2010-08-20 10:51 686switch的使用如下例: view plain ... -
Java学习笔记---3.运算符与表达式
2010-08-20 10:49 676这一部分需要再强调的东西不多,因为运算符表达式都是平时最常用的 ... -
Java学习笔记---2.Java标识符和基本数据类型
2010-08-20 10:48 923这一块里面,标识符比较简单,没有什么需要记录的东西. ... -
Java学习笔记---1.Java发展及JDK配置
2010-08-20 10:47 767Java的老东家是Sun公司(Sun的全名,Stanford ...
相关推荐
统计学习方法笔记-基于Python算法实现源码.zip 统计学习方法笔记-基于Python算法实现源码.zip 统计学习方法笔记-基于Python算法实现源码.zip 统计学习方法笔记-基于Python算法实现源码.zip 统计学习方法笔记-基于...
答案是: 抽象类中允许有自己的构造方法,但是该构造方法并不能直接实例化自己的对象. 如果在抽象类中存在有参构造方法,则必须在子类中明确的使用super([参数列表])指明要调用父类中的哪个构造方法. 这里举例如下: ...
JAVA学习笔记-java学习笔记WORD样式.docx
Java基础每日复习笔记-JavaSE高级阶段.2020-10-13-211312.edf
Java 版设计模式学习笔记-java-design-patterns
Java学习笔记-面向对象-001-面向对象概括 还会继续上传后续文本 详情访问http://www.feifeiblog.com/
Java并发编程与高并发解决方案-学习笔记-www.itmuch.com
6.1. 面向对象与面向过程 6-11 6.2. 对象的概念 6-12 6.3. 成员变量和局部变量 6-12 6.4. 成员方法 6-12 6.5. This关键字 6-13 6.6. 访问控制符 6-13 6.7. 构造方法 6-13 6.8. 数据和方法的隐藏―――封装 6-14 6.9....
java学习笔记--PrintStream分享.pdf
Java学习笔记-Java后来者.exe
JavaSE 之前整理的笔记,一共16章:1.Java概述,2.基本数据类型与运算符,3.流程控制与数组,4.面向对象1(类和对象 方法 构造方法),5. 面向对象2(成员变量与局部变量 常用系统类 包 访问控制符 String),6.面向对象3...
JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象。 能够做...
java学习笔记---从入门到精通之路.pdf
JAVA学习笔记,java知识点总结
LaTex教程--latex排版学习笔记---入门提高.pdf
新版Android开发教程&笔记--基础入门一.pdf 新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.pdf 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记五--...
java学习笔记-Scokect.pdf
-.流程控制 -类.对象 -成员属性.成员方法 -成员方法.构造方法 -this.类变量 -类方法、封装 -访问修饰符.重载.覆盖 -约瑟夫问题 -多态 -抽象类、接口 -final.作业评讲 -作业、测试题 -数组 -排序、查找 -二进制、位...
【JAVA】笔记(8)--- java.lang.String 精讲(csdn)————程序