一.继承性
1.概述
- 引入:
子类一定会继承父类的所有特点吗? 答:不一定,private不会继承,protected需要在一个包里面
- 信息隐藏
就是使用访问修饰符的原因,1.对任何现实细节所作的更改不会影响使用该类的代码,2.防止用户意外删除数据 3. 此类易于使用
3.规定
1、private类型的属性或方法不能被继承
2、public、protected类型的属性或方法一定可以被继承
3、defalut 类型要看子类是否和父类在一个包呢。
二.隐藏与重写
1.引入
大多数情况下,子类可能只有部分适合父类的性质,倘若直接继承,那么子类就会被自动附上父类的特点,不适合实际情况
2.隐藏
- 条件:
需要子类与父类的属性同名(类型不一样都可以,只要同名就行),子类对象在寻找方法或成员变量的时候,先搜索子类独有空间,再搜索父类空间 - 实例
2.方法重写
1.方法重写的要求
两同两小一大:
两同:方法名相同 参数列表一致
两小: 子类返回值类型应该更小或者相等 子类的抛 出的异常小于等于父类的抛出的异常类
一大:子类的访问权限比父类访问权限要大和相等
3.重写与重载
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
4.总结
(1) 变量只能被隐藏(包括静态和非静态),不能被重写
(2) 可以用子类的静态变量隐藏父类的静态变量,也可以用子类的非静态变量隐藏父类的静态变量
(3) 静态方法(static)只能被隐藏,不能被重写;
(4) 非静态方法可以被重写;
(5) 不能用子类的静态方法隐藏父类中的非静态方法,否则编译会报错;
(6) 不能用子类的非静态方法覆盖父类的静态方法,否则编译会报错;
三.实例
import java.util.Date;
class Publication{
protected String name;
protected int price;
protected String date;
public void inputData(String name,int price,String date){
this.name=name;
this.price=price;
this.date=date;
}
public void display(){
System.out.println(name+" "+price+" "+date);
}
}
class Book extends Publication{
private int page;
public void inputPage(int page){
page=100;
}
public void display(){
System.out.println(name+" "+price+" "+date+" "+page);
}
}
public class Hello {
public static void main(String args[]){
Publication p=new Publication();
p.inputData("Publication",120,"1999-2-1");
p.display();
Book b=new Book();
b.inputData("Book",30,"1999-1-1");
b.inputPage(300);
b.display();
}
}