继承
- 继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类封装方式:类
- 子类继承父类的特征和行为,使得子类对象具有父类对象的特征和方法
- 继承需要符合一个关系:is-a , 子类是更具体的父类
- 在声明子类时候,需要通过关键字"extends"表达继承
继承特性
- 子类拥有父类非private的成员变量和方法
- 子类可以拥有自己的成员变量和方法,即子类可以对父类进行扩展
- 子类可以重新实现父类的方法,override
- Java只支持单继承,即只能有一个父类
- super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
- this关键字:指向自己的引用
构造方法
- 子类不能继承父类的构造器(构造方法或者构造函数),如果父类的构造器带有参数,则必须在子类的构造器中显式的通过super关键字调用父类的构造器并配以适当的参数列表。
- 如果父类构造器没有参数,则在子类的构造器中不需要使用super关键字调用父类构造器,系统会自动调用父类的无参构造器。
- 代码实例。
修饰符
- 修饰符用于控制变量,类 的作用域和一些访问限制
- 访问权限修饰符:public,protected,private,default(即不设置)
final
final <类>; -> 防止类被继承
final <变量>; -> 防止变量被修改引用到另外一个对象,可称为"常量"
思考:常量指向的对象能否被修改?
final <方法>;-> 防止方法被重载(override)
代码实例
有一个父类News,拥有自己的 title、content属性,同时拥有一个display方法,
下面有一个子类FileNews ,通过extends 继承了news,这时候这个FileNews类就拥有了父类的title content属性,也拥有了display方法,不过这里它进行了一个重写,所以在main方法里调用display方法时,News的输出是带有换行的,但是FileNews的输出是一个:号,内容在一行。
package news;
public class News {
protected String title;
protected String content;
public News(String title,String content){
this.title = title;
this.content = content;
}
public String getTitle(){
return title;
}
public String getContent(){
return content;
}
// 控制如何显示
public String display(){
return title + "\n" + content;
}
}
package news;
public class FileNews extends News {
public FileNews(String title,String content){
super(title,content);
}
// 控制如何显示
public String display(){
return title + ":" + content;
}
}
package news;
public class Main {
public static void main(String[] args) {
News news = new News("abc","blabla");
System.out.println(news.display());
FileNews fileNews = new FileNews("abc","blabla");
System.out.println(fileNews.display());
}
}