18天Java学习---13.面向对象编程08-Java中继承的概念,子类实例化过程,super()及方法复写
来源:互联网 发布:软件怎开发的 编辑:程序博客网 时间:2024/04/30 07:34
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()) ;
}
}
- 18天Java学习---13.面向对象编程08-Java中继承的概念,子类实例化过程,super()及方法复写
- 18天Java学习---14.面向对象编程09-Java中重载与复写的区别、super与this的比较
- java面向对象-子父类中构造函数的特点-子类实例化过程super
- java面向对象——继承最终章--子类的实例化过程(内存)
- java学习之路 之 面向对象编程-面向对象与面向过程及面向对象的思想概念
- java中super的作用及子类对象的创建过程
- JAVA中子类对象的实例化过程
- Java子类对象的实例化过程
- JAVA基础-子类继承父类实例化对象过程
- 继承、super、复写、final、对象初始化过程
- java之面向对象:子类对象的实例化过程详解
- Java中面向对象的编程概念
- java学习日记_34:面向对象之super关键词、this与super的区别和继承中构造方法的关系。08.16~17
- Java中子类的实例化过程
- Java中子类的实例化过程
- NO7.java学习笔记【面向对象、栈内存、堆内存、构造函数、this、super、继承、覆盖、对象实例化、final】
- 黑马程序员--面向对象学习---继承和子类实例化过程
- java学习之路 之 高级类特性-四种权限修饰符、关键字super、子类对象的实例化过程
- C++著名程序库的比较和学习经验
- JavaScript中的事件委托
- 18天Java学习---12.面向对象编程07-Java中的static关键字用法
- 挂起一段时间的函数--Sleep函数
- Squid
- 18天Java学习---13.面向对象编程08-Java中继承的概念,子类实例化过程,super()及方法复写
- IIS集成配置
- 实例讲解编译过程
- Known Free Software Android Applications
- Android APK反编译得到Java源代码和资源文件
- Recursive function convert to Non-Recursive function
- LINUX系统无法安装
- Flex中事件的初探
- android surfaceflinger研究----Surface机制