继承是OOP
3大特点的
. 这
节主要做
下继承
笔记.
1. 继承
概念及使用
在Java中,通过继承可以简化类
定义,扩展类
功能. Java中支持类
单继承和多层继承,但是不支持多继承,即:
个类只能继承
个类而不能继承多个类.
实现继承
格式为:
子类名 extends 父类
Java中继承只能直接继承父类中
公有属性和公有思路方法,而隐含地(不可见地)继承了私有属性. 继承
内容如下图:
2. 子类对象
例子化过程
子类对象在例子化时,需要注意
是: 子类对象例子化会默认先
父类中
无参构造
,然后再
子类构造思路方法. 例如下面
例子代码:
view plaincopy to clipboardpr
?
="dp-j">
="alt">
="keyword">Person
="">
{
="alt">
="keyword">private
Stringname;
="">
="keyword">private
="keyword">
age;
="alt">
="">
="comment">//父类
无参构造思路方法
="alt">
="keyword">public
Person
="">
{
="alt">
.out.prln(="
">"
父类中
构造思路方法
"
);
="">
}
="alt">
="comment">//getter和
ter思路方法
="">
="keyword">public
StringgetName
="alt">
{
="">
="keyword">
="keyword">this
.name;
="alt">
}
="">
="keyword">public
="keyword">void
Name(Stringname)
="alt">
{
="">
="keyword">this
.name=name;
="alt">
}
="">
="keyword">public
="keyword">
getAge
="alt">
{
="">
="keyword">
="keyword">this
.age;
="alt">
}
="">
="keyword">public
="keyword">void
Age(="keyword">
age)
="alt">
{
="">
="keyword">this
.age=age;
="alt">
}
="">
="comment">//返回信息思路方法
="alt">
="keyword">public
StringgetInfo
="">
{
="alt">
="keyword">
="
">"姓名是:"
+name+="
">",年龄是:"
+age;
="">
}
="alt">
}
="">
="keyword">
Student="keyword">extends
Person
="alt">
{
="">
="keyword">private
Stringschool=="
">"软件Software学院"
;
="alt">
="comment">//子类
无参构造思路方法
="">
="keyword">public
Student
="alt">
{
="">
Name(="
">"
sa
on"
);
="alt">
Age(="number">23
);
="">
.out.prln(="
">"
子类中
构造思路方法
"
);
="alt">
}
="">
="keyword">public
="keyword">void
pr
="alt">
{
="">
.out.prln(getInfo+="
">",学校是:"
+school);
="alt">
}
="">
}
="alt">
="keyword">public
="keyword">
Demo01
="">
{
="alt">
="keyword">public
="keyword">
="keyword">void
(Stringargs)
="">
{
="alt">
="comment">//使用子类对象
="">
Students=="keyword">
Student;
="alt">
s.pr;
="">
}
="alt">
}
="java" style="DISPLAY: none" rows="15" cols="95" name="code">
Person
{
private String name;
private
age;
//父类
无参构造思路方法
public Person
{
.out.pr
ln("
父类中
构造思路方法
");
}
//getter和
ter思路方法
public String getName
{
this.name;
}
public void
Name(String name)
{
this.name = name;
}
public
getAge
{
this.age;
}
public void
Age(
age)
{
this.age = age;
}
//返回信息思路方法
public String getInfo
{
"姓名是: "+name+",年龄是: "+age;
}
}
Student extends Person
{
private String school = "软件Software学院";
//子类
无参构造思路方法
public Student
{
Name("
sa
on");
Age(23);
.out.pr
ln("
子类中
构造思路方法
");
}
public void pr
{
.out.pr
ln(getInfo
+",学校是:"+school);
}
}
public
Demo01
{
public
void
(String args
)
{
// 使用子类对象
Student s =
Student
;
s.pr
;
}
}
3.super
思路方法和类思路方法复写机制
3.1 super
思路方法
在上面
例子中, 实际上在子类Student
构造思路方法中隐含了个super思路方法. 该思路方法表示父类(即超类)构造思路方法. 需要注意是,我们也可以使用super(参数类型 参数名, 参数类型 参数名, ...)这样格式来父类重载后含参构造思路方法. 下面例子中用到了这种super思路方法.
3.2 子类对父类思路方法复写
子类可以继承父类思路方法,也可以复写父类思路方法. 但复写父类思路方法有个基本前提: 所复写思路方法不能有比父类思路方法更严格访问权限. (访问权限 public > default > private)
这里举个例子,在该例子中, 子类Student以super(name,age)形式父类构造思路方法,同时子类以不变权限复写了父类getInfo思路方法:
view plaincopy to clipboardpr
?
="dp-c">
="alt">
="keyword">Person
="">
{
="alt">
="keyword">private
Stringname;
="">
="keyword">private
="keyword">
age;
="alt">
="comment">//希望在
Person类
构造思路方法
时候可以直接为属性
化
="">
="keyword">public
Person(Stringname,="keyword">
age)
="alt">
{
="">
="keyword">this
.Name(name);
="alt">
="keyword">this
.Age(age);
="">
}
="alt">
="comment">//私有属性要加入
ter和getter操作就可以访问了
="">
="keyword">public
="keyword">void
Name(Stringname)
="alt">
{
="">
="keyword">this
.name=name;
="alt">
}
="">
="keyword">public
="keyword">void
Age(="keyword">
age)
="alt">
{
="">
="keyword">this
.age=age;
="alt">
}
="">
="keyword">public
StringgetName
="alt">
{
="">
="keyword">
="keyword">this
.name;
="alt">
}
="">
="keyword">public
="keyword">
getAge
="alt">
{
="">
="keyword">
="keyword">this
.age;
="alt">
}
="">
="keyword">public
StringgetInfo
="alt">
{
="">
="keyword">
="
">"姓名="
+="keyword">this
.name+="
">"
年龄="
+="keyword">this
.age;
="alt">
}
="">
}
="alt">
="comment">//和Person类相比是扩充了Person类
功能
所以此处继承即可
="">
="keyword">
StudentextendsPerson
="alt">
{
="">
="keyword">private
Stringschool;
="alt">
="">
="keyword">public
Student(Stringname,="keyword">
age,Stringschool)
="alt">
{
="">
="comment">//super
;//-->隐含
代码
="alt">
="comment">//此时最好可以明确
指出要
父类中
有两个参数
构造思路方法
="">
="comment">//直接指明
父类中有两个参数
构造思路方法
="alt">
super(name,age);
="">
="keyword">this
.School(school);
="alt">
}
="">
="keyword">public
="keyword">void
School(Stringschool)
="alt">
{
="">
="keyword">this
.school=school;
="alt">
}
="">
="keyword">public
StringgetSchool
="alt">
{
="">
="keyword">
="keyword">this
.school;
="alt">
}
="">
="comment">//子类覆写了父类中
getInfo
思路方法
="alt">
="keyword">public
StringgetInfo
="">
{
="alt">
="comment">//
父类中
getInfo
思路方法,使用super.思路方法名
格式
="">
="keyword">
super.getInfo+="
">"
学校="
+="keyword">this
.school;
="alt">
}
="">
}
="alt">
="keyword">public
="keyword">
Demo02{
="">
="keyword">public
="keyword">
="keyword">void
(Stringargs)
="alt">
{
="">
="comment">//使用子类对象
="alt">
Students=="keyword">
Student(="
">"
sa
on"
,23,="
">"软件Software学院"
);
="">
.
="keyword">out
.prln(s.getInfo);
="alt">
}
="">
}
延伸阅读
最新评论