关于Java(4)

本文详细介绍了Java的访问控制修饰符,包括public、protected、private和默认包访问权限。同时,阐述了子类继承父类时可见的属性和方法,以及组合的概念和作用。此外,还探讨了方法的重载和覆写,解释了两者之间的区别和在代码复用与多态性中的应用。
摘要由CSDN通过智能技术生成

关于Java(4)

陈述题

1. Java的访问控制修饰符有哪些?各有什么访问权限?

访问控制修饰符访问权限
public公共访问权限
protected包访问权限、继承访问权限
private类内部访问权限
无访问控制符修饰包访问权限

在这里插入图片描述

2. 子类对于从父类继承的哪些属性与方法是可见的?
子类继承父类的所有属性和方法,但只有public、protected的属性和方法在子类是可见的。
子类在继承父类的时候,首先应该满足父类可被访问,例如当子类和父类不在同一个包当中时,父类修饰符必为public;在父类能被访问的前提下,凡是修饰符为public或是protected的父类属性成员或是方法能被子类所访问;private的属性成员或是方法则不能被访问。
以PPT的FighterPlane为例:

package runplane;

public class Plane {
	protected String name;
	public void setName(String _name) {//如果将name的访问控制修饰符
	//改为private,则可以通过此函数来改变name的值
		name=_name;
	}
	public String getName() {
		return name;
	}
}
package runplane;

public class FighterPlane extends Plane{
	private int missileNum;
	public void setNum(int _missileNum) {
		missileNum=_missileNum;
	}
	public void fire() {
		if(missileNum>0) {
			if(missileNum>0) {
				System.out.println("Now fire a missile!");
				missileNum-=1;
			}else {
				System.out.println("No missile left!");
			}
		}
		
	}
}
package runplane;

public class Run {
	public static void main(String[] args) {
		FighterPlane p=new FighterPlane();
		p.name="su35";
		System.out.println(p.getName());
		p.setName("f35");
		System.out.println(p.getName());
		p.setNum(6);
		p.fire();
	}
}

3. 什么是组合?有什么作用?
定义:一个类的对象引用是另一个类的属性就是一个组合现象。(类的复用方式之一,优先于继承)
作用:实现代码的复用;使对象间的耦合性较为松散,比如: 假设有一个类A,另一个类的对象引用fp是它的属性,当外界的变化使fp所指向的对象损坏时,我们可以灵活地将fp指向另一个对象。

package FighterPlane;

class FighterPlane {
	public String name;
	protected int missileNum;
	public FighterPlane(String _name,int _missileNum) {
		name=_name;
		missileNum=_missileNum;
	}
	public void fire() {
		if(missileNum>0) {
			if(missileNum>0) {
				System.out.println("Now fire a missile!");
				missileNum-=1;
			}else {
				System.out.println("No missile left!");
			}
		}
	}
}
package FighterPlane;

public class A {
	FighterPlane fp;
	public A(FighterPlane fpp) {
		this.fp=fpp;//A对象拥有了FighterPlane对象引用
	}
	public void invoke() {
		//A对象发送消息给FighterPlane的对象
		System.out.println(fp.name);
	}
}
package FighterPlane;

public class Run {
	public static void main(String[] args) {
		FighterPlane ftp=new FighterPlane("su35",10);
		FighterPlane ftp2=new FighterPlane("苏-35",10);
		//产生A对象,并将ftp作为对象引用传入
		A a=new A(ftp);
		a.invoke();
		a.fp=ftp2;
		a.invoke();
	}
}

4. 什么是重载?有什么作用?
定义:方法名称相同,参数类型或个数不同。(同一类中通常提供多个重载方法)(同名同参数但不同类型返回值的方法不是重载,编译不能通过)
作用:可以实现程序的消息处理接口方法的扩充,同时保留旧的接口方法保障原先使用程序的稳定。

class Parent{
	public int getScore(){
		return 3;
	}
	public int getScore(){
		return i;
	}
}

5. 什么是覆写?有什么作用?
定义:子类对父类的同名方法(方法名称相同、参数相同、返回值类型相同)进行重新定义,即在子类中定义与父类中已定义的同名不同内容的方法,这种多态被称为覆盖。
作用:方法覆盖与引用替换相结合,可使抽象类的声明在保证消息发送统一的前提下,具有消息结果执行上的相异性特点。

  • 覆写与重载的区别:
    覆写:方法名称相同,参数类型、个数一致,子类返回类型可向上转型到父类返回类型(类族)。
    重载:方法名称相同,参数类型或个数不同(同一个类)。
class Parent {
	public int getScore(){
		return 3;
	}
}
class Son {
	public int getScore(){
		return 4;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值