成员变量的隐藏:子类中定义了与父类中名字相同的成员变量,父类中的成员变量在子类中不可见。
例:有类A派生出类B的定义如下:
public class A{
int x=6;
void fx(){}
}
public class B extends A{
int x=3;
void fy(){
x = 8;
}
}
public class Demo {
public static void main(String[] args) {
B b = new B();
b.fy();
System.out.println(b.x);
}
}
在子类中,引用父类同名成员变量的格式:
super.成员变量名;
例:有类A派生出类B的定义如下:
public class A{
int x;
void fx(){}
}
public class B extends A{
int x;
void fy(){
x = 8;
super.x=10;
}
}
注意:super只能用于子类定义中,访问父类对象的成员
方法覆盖:
父类中的非私有实例成员方法被子类继承,但如果继承成员方法不能满足子类功能,则子类重写该方法。
• 要求:
方法头要与父类一样,即两个方法要具有相同的方法名、返回类型、形参列表。
若子类中需要调用被覆盖的父类中的同名方法,可使用
super关键字: super.方法名()
注意事项:
1、由于覆盖现象是同名实例方法分别属于不同的类,所以要用不同类的对象名调用 ;
2、子类不能覆盖父类的final实例方法;
如果子类中的静态方法的签名和父类静态方法的签名一样,则这个方法隐藏3、父类的static方法;(静态方法建议用类名调用,如果用对象名调用,则声明该对象的是什么类,就调用该类中的静态方法)
示例:
1、定义一个Computer类,要求包含以下属性和方法:
属性:型号(model),操作系统(OS)
包含2个构造方法:
2个参数(String model,String OS)通过参数传递设置属性的值。
1个参数(String model)通过参数设置属性model的值,并把OS的值设置为”Windows10”
成员方法:
定义所有属性的getter、setter访问器;
定义方法work( ):输出“电脑都拥有操作系统,可运行程序!”
定义方法print( ):输出品牌、操作系统等信息。
2、定义Computer的子类Laptop(笔记本电脑):
分别定义包含2个参数和1个参数的构造方法。
覆盖父类的work( )方法:输出:“手提电脑,便于携带,用于移动办公环境!”
3、定义Computer的子类IPad:
定义1个参数的构造方法(把OS的值设置为默认值“iPadOS13”)。
覆盖父类的work( )方法:输出:“触屏操作,轻便,用于娱乐消遣!”
4、定义测试类ComputerDemo,编写main方法,在main方法里面分别创建Computer、Laptop、IPad类的对象,并分别调用他们的work、print方法。
public class Computer {
String model, os;
public Computer (String model , String os){
this.model=model;
this.os=os;
}
public Computer(String model){
this.model=model;
os="Windows10";
}
public String getModel() {
return model;
}
public String getSo() {
return os;
}
public void setModel(String model) {
this.model=model;
}
public void setSo(String os) {
this.os=os;
}
public void work() {
System.out.println("电脑都拥有操作系统,可运行程序!");
}
public void print() {
System.out.println("该电脑的品牌为:"+model);
System.out.println("该电脑的操作系统为:"+os);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
public class Laptop extends Computer{
public Laptop(String a) {
super(a);
}
public Laptop(String a,String b) {
super(a,b);
}
public void work() {
System.out.println("手提电脑,便于携带,用于移动办公环境!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
public class IPad extends Computer{
public IPad(String a) {
super(a);
os="iPadOS13";
}
public void work() {
System.out.println("触屏操作,轻便,用于娱乐消遣!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
import java.util.Scanner;
public class ComputerDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String a,b,d,e,f;
Scanner s=new Scanner(System.in);
System.out.println("请输入computer的品牌和操作系统");
a=s.next();b=s.next();
Computer c=new Computer(a,b);
c.work();c.print();
System.out.println("请输入laptop的品牌和操作系统");
d=s.next();f=s.next();
Laptop l=new Laptop(d,f);
l.work();l.print();
System.out.println("请输入iPad的品牌");
e=s.next();
IPad i=new IPad(e);
i.work();i.print();
s.close();
}
}
执行结果: