访问权限修饰符与方法的重写

访问权限修饰符

 作用:表示被修饰的元素的访问权限
访问权限修饰符有四个:public protected 【default】(又叫默认权限修饰符)  private
访问权限修饰符可以修饰的元素:
	1.类 只有public  abstract和final能够修饰,或者不加【private和protected可以修饰内部类】

​	2.成员变量

​	3.成员方法

四个修饰符的特点

1. public修饰的成员一切类可见
2. protected修饰的成员本包下面可见,不同包下只有子类可见
3. 默认修饰的成员仅对同包下面可见
4. private修饰的成员仅对本类可见

Java中的封装就是通过访问权限修饰符来实现的
访问权限修饰符的宽严的关系
public > protected > default > private

方法的重写

如果从父类继承的方法不能满足之类的需求的情况下,可以进行改写,这个过程也称为方法的覆盖(override),也称为方法的重写,子类中出现和父类中一模一样的方法声明,也称为方法的覆盖或者方法的重写

方法的重写的规则

1. 方法名称相同
2. 参数列表相同
3. 返回值类型相同或者是其子类
4. 访问权限修饰符不能严于父类

方法的重写的注意事项

1. 父类的私有的方法不能被重写
2. 构造方法不能被重写
3. 子类重写父类方法时,访问权限修饰符不能更低
4. 重载和重写的区别

重载和重写的区别

重载的定义
	1. 同一个类中
	2. 方法名称相同
	3. 参数列表不同
	4. 和返回值及访问权限修饰符没有关系
位置方法名参数列表返回值访问权限修饰符
方法的重写子类相同相同相同或者子类不能严于父类
方法的重载同类相同不相同没有关系没有关系
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
重载与覆写/重写的区别 区别 重载 覆写 1 单词 OverLoading Override 2 概念 方法名称相同,参数的类型或个数不同 方法名称相同,参数的类型或个数相 同,返回值类型相同 3 范围 发生在一个类之 发生在类的继承关系 4 权限 一个所重载多个方法可以不同的权限 被子类所覆写的方法不能拥有比父类更严格 的访问控制权限 重载可以改变返回值类型,但是这样做没有任何的意义, 可是对于覆写而言,绝对不能修改返回值类型,但是在子类所覆写的方法应该可以继续进行重载。 重载(Overloading)  (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。   重载Overloading是一个多态性的一种表现。 (2) Java方法重载,就是在类可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。   调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。 (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。     无法以返回值类型作为重载函数的区分标准。 复制代码 /** * 1. 方法重载只可以通过方法名和方法参数来区别,即“方法签名” * @return * @throws NumberFormatException */ public int getSides(Object obj) throws NumberFormatException { return 1; } /** * 2. 不能通过访问权限,返回类型,异常列表进行重载 * * 下面方式错误! */ private Object getSides() throws NumberFormatException, Exception { return 1; } /** * 3. 方法异常类型和数目不会对重载造成影响。 * 下面方式错误! */ public int getSides() throws NumberFormatException, IndexOutOfBoundsException, Exception { } 复制代码 重写(Overriding) (1) 父类与子类之间的多态性,对父类的函数进行重新定义。   如果在子类定义某方法与其父类有相同的名称和参数,我们说该方法重写 (Overriding)。   在Java子类可继承父类方法,而不需要重新编写相同的方法。   但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法重写。   方法重写又称方法覆盖。 (2)若子类方法与父类的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。   如需父类原有的方法,可使用super关键字,该关键字引用了当前类的父类。 (3)子类函数的访问修饰权限不能小于父类的;  多态性是面向对象编程的一种特性,和方法无关, 简单说,就是同样的一个方法能够根据输入数据的不同,做出不同的处理,   即方法的重载——有不同的参数列表(静态多态性)   而当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法, 即在子类重写方法——相同参数,不同实现(动态多态性) 复制代码 public class Base { void test(int i) { System.out.print(i); } void test(byte b) { System.out.print(b); } } public class Dog extends Base { void test(int i) { i++; System.out.println(i); } public static void main(String[] agrs) { Base b = new Dog(); b.test(0); b.test((byte) 0); } } 复制代码 这时的输出结果是1 0,这是运行时动态绑定的结果。   简单说来重写就是子类对父类(层级上)非私有成员方法的重新功能定义。 复制代码 // begin /** * 1. 重写方法必须和被重写方法的“方法签名”一致,即方法名+参数必须相同 */ public int getSides() { return 3; } // end // begin /** * 1. 重写方法访问修饰符一定要大于被重写方法访问修饰符 * (public > protected > default > private) * * 原因: * 2. 有一个可以装1升水的瓶子;你需要用另一个瓶子去继承它, 那你觉得你能用一个半升谁的瓶子继承他吗? */ /** * @return * 本方法重写方式错误 */ // protected int getSides() { // return 3; // } /** * 对父类ShapegetSide方法进行重写,实现多态 * @return */ public int getSides() { return 3; } // end // begin /** * 3. 重写和被重写方法返回值必须相同 * 此方法错误 */ // public double getSides() { // return 3d; // } // end // begin /** * 4. 重写方法抛出的异常必须和被重写方法抛出异常一致,或者是其子类 * 详细见:overrideexception包例子 */ public int getSides() throws NullPointerException { return 3; } // end /** * 5. 父类private方法不能被子类重写,因为private只有父类本类可见。 */ /** * 6. 静态方法不存在重写概念,重写是面向对象特性,静态方法是类方法,用类名直接访问。 */ 复制代码

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值