java 继承 修饰符_Java学习 封装 继承 权限修饰符 重写 super final

封装

封装是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

从上面就可以知道为什么要使用封装了。相对于其他类型的数据,可以被直接操作成员属性,这样会出现不安全的情况。

因此出现了先的关键字:private 私有的 --> 成员修饰符

那么私有的就一定保证安全么?属性不允许直接操作

间接操作在方法中可以进行逻辑判断

因此在后面的java学习中,我们尽量多使用私有属性,然后通过提供公共的访问方式来改变数据,而不是向之前直接可以修改数据,这样做大大提高了安全性。

封装的优点:

提高代码的安全性

提高代码的复用性

举例:

public String name;

private int age;

public String gender;

在上面的三个定义中,private定义的数值不可以被直接修改,而public可以。

想要对私有类型private进行修改,需要 设置器 和 访问器 在该类中来修改private修饰的值。

age的设置器

返回值:不需要 参数:需要

public void setAge(int age){

if(age>0 && age<=150){

this.age = age;

}else{

System.out.println("年龄不合法!!!");

}

}

age的访问器

返回值:需要 返回值int age参数:不想要

public int getAge(){

return age;

}

继承

继承: 子承父业 extends(继承+扩展)

类: 一系列对象的共性-->对对象的抽象

父类: 一些列类的共性 -->对类的抽象

简单的说明一下为什么要使用继承,很大程度上是为了简化代码,比方说:班级里面有一群学生和老师,他们共同的属性是:性别 年龄 姓名。 如果定义一个学生这些值写一遍,定义一个写一遍,那么效率太低了。因此把他们共同属性用一个父类来存储,而下面各种各样的子类,只要继承了这个父类,那么父类中的这些属性子类就可以读取到了,并且还可以扩展性的属性,比如学生可以加 public String suject; 老师就可以加别的属性 public String teach ;

为什么要用继承:

提高代码的复用性

如何使用继承:

子类 extends 父类

继承的好处:

1)提高代码的复用性

2)子类一旦继承父类,就可以使用父类中的内容

3)子类中定义自己多有的内容

一类父类可以被多个子类继承,但是一个子类只能继承一个父类,java是单继承机制,但是可以多实现

能够修饰类的修饰符: public | default (默认)

单继承的优点:

使用简单

单继承的缺点:

不便于后期维护

面向对象的设计原则之一: 开闭原则,对修改关闭,对扩展开放

举例:

父类 人Person

class Person{

public String name;

public int age;

public String gender;

//休息

public void sleep(){

System.out.println(name+"正在休息...");

}

}

子类 学生继承父类 Person

class Student extends Person{

public String subject; //新增-->扩展

public Student() {

// TODO Auto-generated constructor stub

}

//学习

public void study(){

System.out.println(name+"正在敲代码...");

}

}

权限修改符

权限修饰符 :访问对象成员的限定范围

就像前面说的private就是,限制了对象成员的范围,只有同一个类中可以访问。

private本类

default(默认)本类 同包类

protected 本类 同包类 不同包子类

public 本类 同包类 不同包子类 不同包

成员修饰符,只能修饰成员,不能修饰局部

修饰类的权限修饰符:public ,default(默认的)

私有内容不能被继承,静态的可以被继承

使用protected修饰的内容:

1.同包类

2.不同包的子类中,通过继承关系使用

重写

重写 和 重载的区别:

都是指方法才有重写和重载

重载:

1.同一个类中

2.多个方法方法名相同

3.参数列表不同|方法签名(方法名+参数列表:区分方法的唯一)

重写的条件:

1.不同的类

2.继承|实现

3.方法签名相同

作用: 子类一旦重写父类中的某个方法,子类对象调用的是子类中重写的方法,对父类同名方法屏蔽

检查是否为重写方法:

1.左侧出现向上的三角形

2.注解 Override @注解名

不能被重写:

1.private修饰的方法不能被重写

2.final修饰的内容不能被重写

3.被static修饰的内容不能被重写

如果子类中定义一个方法,在它的父类中有同名(方法签名)的静态方法,子类中的这个方法也必须是静态的。

重写的要求:

== : 方法签名必须完全相等

<= : 返回值类型 : 基本数据类型必须相等, 引用数据类型:子类的返回值类型<=父类的返回值类型

>= : 子类重写方法的的权限修饰符必须>=父类中这个方法的权限修饰符

举例:

//父

class JianLin{

private String xiaomi;

//名言

public JianLin words(){

System.out.println("先定一个小目标,挣他一个亿...");

return null;

}

void haha(){

}

}

//子类

class SiCong extends JianLin{

//父类中的方法我要,方法的实现不满足我要求,子类中对这个方法进行重写,重新定义方法体的实现

@Override

public SiCong words(){

System.out.println("我不在乎我的朋友有钱没钱,反正都没我有钱...");

return null;

}

//子类新增方法

public void play(){

}

void haha(){

}

void haha(int a){

}

}

Super

super 和 this 之间的区别:

this:指代当前new的对象

super: 指代父类对象

调用父类构造器: 在子类构造器首行调用父类中的某个构造器

super(参数列表);

如果没有显示调用,默认在 首行 调用父类空构造,如果一旦显示调用,就不会默认调用父类空构造器了

为什么要显示调用父类的其他构造器:

1.父类没有空构造

2.简化代码

首行调用构造器:super和this不能同时存在,因为都要在首行

如果存在this(),会在this调用的构造器首行调用父类构造器

区分同名变量问题:

父类中的成员和子类中的成员同名问题:

默认this指代子类(就近原则),如果想要使用父类中的同名成员,super调用

如果使用:先找局部-->本类中的成员(this)-->父类中(super) ,默认就近原则

创建对象: 先父类后子类

初始化: 先静态后成员

Final

final :最终的

final修饰的变量为常量

final修饰的方法不能被重写

final修饰的类不能被继承(太监类)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值