类和对象(中)

Java的访问控制修饰符及权限

修饰符:public、protected、private、缺省;
类的各种成员和方法被不同修饰符修饰
同一包内,可以访问所有类的public,protected,缺省的所有属性和方法,不能访问private属性和方法。
同一包
不同包只能访问其他包的public属性和方法,其他都不可访问
不同包

小结

访问权限首先看类前的修饰符:
当类的修饰符为public时,则类可以被所有的类所访问(可以import)
当为默认时,则只能为包中的类所访问。
在此前提下,再看属性和方法前的修饰符:
类前修饰符为public时,当属性和方法前的修饰符为public时,则该属性可以被所有类访问;
当属性和方法前为protected修饰时,对于类定义而言,可以被同包中的类和所有子类访问(子类和父类可以不在同一个包中),也就是B+C范围,但对于对象而言,只能被同一个包的类对象所访问,也就是B的范围;
当为默认时,只能被同包中的类所访问(比protected访问权限小);当为private时,只能被本类内部所访问 。
在这里插入图片描述

子类对于从父类继承的哪些属性与方法的可见性

子类继承了父类的所有属性和方法, 但只有public、protected的属性和方法在子类是可见的。
子类在继承父类的时候,首先应该满足父类可被访问,例如当子类和父类不在同一个包当中时,父类修饰符必为public;在父类能被访问的前提下,凡是修饰符为public或是protected的父类属性成员或是方法能被子类所访问;
private的属性成员或是方法则不能被访问。
在这里插入图片描述
在这里插入图片描述
不同包中子类可以访问父类的public和protected属性和方法
在这里插入图片描述
灵活点,这样也可以哒
在这里插入图片描述

组合

组合:一个类的对象引用是另一个类的属性就是一个组合现象。
作用:java代码复用的一种方法。顾名思义,就是使用多个已有的对象组合为一个功能更加复杂强大的新对象。体现的是整体与部分、拥有的关系.

public class job {
	String name;
	int salary;
	public int getsalary() {
		return salary;
	}
	public void setsalary(int sa) {
		this.salary=sa;
	}
	public String getname() {
		return name;
	}
	public void setname(String na) {
		this.name=na;
	}
}
class person{
	String name;
	job j;
	person(String na){
		this.j=new job();
		j.setname("baiche");
		j.setsalary(100);
		this.name=na;
	}
	public void cout() {
		System.out.println("My name is "+name);
		System.out.println("My job is "+j.getname());
		System.out.println("My salary is "+j.getsalary());
	}
}
public class run3 {
	public static void main(String[] args) {
		person p=new person("jiangshan");
		p.cout();
	}
}

重载

重载:在类中定义了多个同名而不同内容参数的成员方法时,称这些方法是重载方法。
作用:同一类型的方法,对不同的对象,具有不同的表现形式

class Parent {
	public int getScore(){
		return 3;
	}
}
class Son extends Parent {
	public int getScore(){
		return 4;
	}
}

注:如果子类定义的方法与父类名称相同(大小写完全匹配),但参数名称不同,不是覆盖,而是重载。如果名称、参数相同,返回值不同,则编译不能通过。

覆盖

如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法。

public class zilei {
	int a,b;
	int sum;
	public void set(int a,int b) {
		sum=a+b;
		System.out.println(sum);
	}
	public int get() {
		return sum;
	}
}
class fugai extends zilei{
	public void set(int a,int b) {
		sum=a*b;
		System.out.println(sum);
	}
}
public class run4 {
	public static void main(String[] args) {
		zilei z=new zilei();
		z.set(2, 3);
		fugai f=new fugai();
		f.set(2,3);
	}
}
注意;子类的访问修饰符权限应等于或大于父类
同名的static方法和非static方法不能相互覆盖
方法前有final修饰符,此方法不能在子类方法中进行覆盖
在JDK中,很多父类的方法被子类重新覆盖,赋予了不同的含义,如Object类中的boolean equals(Object obj)方法
抽象类中如果存在抽象方法,则具体子类必须对抽象方法进行覆盖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值