Java 成员变量的隐藏和方法覆盖

成员变量的隐藏:子类中定义了与父类中名字相同的成员变量,父类中的成员变量在子类中不可见。
例:有类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();
	}

}

执行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值