关于面向对象的三大特性

一.封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问。如果想访问被封装的信息,必须通过我们提供的方法进行访问。获得属性的值使用的是get方法,设置属性的值使用的是set方法。
1.步骤:*
(1)将属性的访问修饰符改成private
(2)类中提供公有的set和get方法
(3)在set或者get方法中添加控制语句
boolean类型的变量,它的set和get方法注意一下:
private boolean flag;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
2.访问修饰符的规则:
private访问修饰符 修饰的属性和方法只能在当前类中使用。
二.继承
(1)子类和父类之间是is - a关系
(2)当子类中的代码有冗余的,将冗余的代码放到父类中,子类继承父类。
(3)继承使用extends关键字
(4)继承是单根性的,一个类只有一个父类。

子类继承父类的哪些内容:
(1)继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里
(2)继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里
(3)子类不能继承父类中的私有属性和方法
(4)子类不能继承父类的构造方法,子类能够调用父类的构造方法。

super关键字的作用:
(1)调用父类的属性
(2)调用父类的方法
(3)调用父类的构造方法
注意:
super不能访问父类的private成员
super只能出现在子类的方法和构造方法中

static关键字的作用:
(1)statis
修饰的变量(成员变量)叫作静态变量。静态变量可以通过对象名调用也可以通过

类名去调用。静态变量只有一个拷贝。
修饰的方法叫作静态方法。
static修饰的代码块叫做静态代码块.

JVM加载类时,加载静态代码块

如果有多个静态块,按顺序加载每个静态代码块只会被执行一次

成员变量:
(1)静态变量
(2)实例变量

静态变量和实例变量的区别:
(1)修饰的变量(成员变量)叫作静态变量,没有被static修饰的成员变量叫作实例变量。
(2)访问实例变量,必须通过对象名.成员变量名。
访问静态变量,通过对象名.静态变量 也可以通过 类名.静态变量。
(3)静态变量属于类的,修改了静态变量的值,其他对象中的静态变量的值也会跟着改变。(在内存中只有一个拷贝)实例变量属于对象的,一个对象中的实例属性改变了,另一个对象中的实例变量不会
跟着改变。(每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响)
(4)类内部,静态变量可以在静态方法中调用也可以在实例方法中调用。
(5)静态变量只能在类中定义

方法:
静态方法 和 实例方法
(1)static修饰的方法叫作静态方法。反之就是实例方法。
(2)实例方法必须通过对象名.方法名调用。静态方法通过类名调用也可以通过对象名调用。
(3)静态方法想调用实例方法,必须通过对象名.方法名调用。实例方法可以直接调用静态方法。静态方法中不能直接调用实例变量,必须通过对象名.实列变量。
(4)静态方法中不能使用this关键字
(5)实例方法可直接访问所属类的静态变量、静态方法、实例变量和实例方法

父类构造方法的调用规则:
(1)使用super关键字调用父类的有参构造方法,必须放在子类构造方法的第一行。使用this关键字调用本类的构造方法,也要放到构造方法的第一行,所以在构造方法中,不能同时使用this关键字和super关键字调用构造方法。
(2)如果子类中的构造方法中没有使用this关键字和super关键字调用构造方法,默认调用父类的无参构造方法。如果子类中的构造方法中
使用super关键字调用父类的有参构造方法,则子类不会在调用父类的无参构造方法。

方法的重写:
1 子类重写的是 子类继承的父类的方法(构造方法不能被重写)。
2 当父类中的方法不能够满足业务需求的时候,重写父类中的方法。
3 重写时,可以用super.方法的方式来保留父类的方法
4 子类中特有的方法,不能被重写。
5 @Override 标识某个方法是方法重写。

重写规则:
1 子类重写 子类继承父类的方法
2 方法名相同 参数列表相同
3 方法的返回修饰符不能严于父类方法的访问修饰符
4 方法的返回值是父类方法的返回值的子类或者是父类方法的返回值的类型

三.多态
多态:(继承关系)
同一个变量,引用不同的对象,执行不同的方法。

向上转型:
子类对象赋值给父类类型的变量。
父类类型 父类变量=new 子类类型()。

将子类对象赋值给父类类型的变量。父类变量调用的方法,如果该方法是子类重写过的父类方法,调用的就是子类重写父类的方法。如果该方法子类没有重写父类的方法,调用的是父类的方法。

向下转型:
将一个指向子类对象的父类引用赋给一个子类的引用,即:父类类型转换为子类类型。需强制类型转换
子类类型 子类变量 = (子类类型) 父类变量;
注意:
在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常

使用多态的主要方式2种方式:
1.父类作为方法的形参
public void cure(Pet pet) {
pet.toHosiptal();
}
2.父类作为方法的返回值
public Pet give(String type) {
if (type.equals(“dog”)) {
return new Dog();
} else {
return new Penguin();
}
}

抽象类规则:
1 含有抽象方法的类是抽象类,抽象类不一定含有抽象方法。
2 如果一个类继承了抽象类,实现抽象类中的方法。 如果类不想实现抽象方法,这个类也是一个抽象类。
3 抽象类不能实例化

抽象类与抽象方法的使用:
抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
没有抽象构造方法,也没有抽象静态方法
抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用

抽象类与普通类的区别
抽象类使用abstract关键字修饰。
抽象类不能实例化,但可以创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例。
抽象类中可以有抽象方法 也可以么有抽象方法。

普通类能够实例化。
普通类中一定不能含有抽象方法。

抽象方法与普通方法的区别:
抽象方法没有方法体。
普通方法有方法体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值