面向对象
封装
封装的定义
封装是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
如何进行封装
- 1、private (私有的)修饰符进行修饰
- 2、get set 方法进行修改和取值
get 方法
public 属性的类型 getXxx ( ){
return 属性名
}
public int getAge ( ){
return age;
}
注意:Boolean类型的get方法,是is开头的,例如:
- public boolean isMarry();
错误写法:
public boolean getMarry();
set方法
public void setXxx (属性类型 属性名 ){
this . 属性名 = 属性名
}
public void setAge (int age ){
this . age = age;
}
封装的优点
1、提高代码的安全性
2、提高代码的复用性
3、使用时,只需要了解访问方式,不需要内部实现细节
继承
定义
子类继承父类的非私有属性(带private关键字的,构造方法)
继承的使用(extends)
class 父类 {
}
class 子类 extends 父类 {
}
继承的优缺点
1、优点
- 提高了代码的复用性,提高软件开发效率
- 让类于类之间产生了关系,提供了多态的前提
2、缺点 - 耦合度太高,父类发生改变后会立马影响到子类
注意事项
Java只支持单继承,不允许****多继承,但是可以多重继承
定义类的时候没有使用extends,则默认父类为Object
代码实现
Dog这个子类并没有属性和方法,为什么还是能打印出小黄在跑???
因为子类Dog继承了父类Animal的属性和方法
public class Demo {
public static void main(String[] args) {
Dog dog = new Dog("小黄");
dog.run(); //小黄在跑
}
}
class Animal {
String name;
public void run() {
System.out.println(this.name + "在跑");
}
}
class Dog extends Animal {
public Dog(String name) {
this.name = name;
}
}
多态
作用
降低程序的耦合度,提高程序的扩展力。
必要条件
- 1、继承是多态的前提
- 2、子类重写父类方法
- 3、父类引用指向子类对象
向上转型和向下转型
向上转型
本质:父类引用指向子类对象
语法:父类类型 引用 = new 子类类型()
特点
- 1、编译类型看左边,运行类型看右边
- 2、可以调用父类中的所有成员
- 3、不能调用子类特有成员
- 4、最终运行效果看子类的具体实现
栗子
Animal animal = new Dog( ); 【animal的 编译类型是Animal,运行类型是Dog】
向下转型
语法:子类类型 引用名 =(子类类型)父类引用
特点:
- 1、只能强转父类的引用,不能强转父类的对象
- 2、要求父类的引用必须指向的是当前目标类型的对象
- 3、可以调用子类类型中所有的成员
- 4、向下转型的前提是:有了向上转型,没有向上转型会报错
什么时候必须使用向下转型
- 当你调用的是子类特有的方法时
动态绑定和静态绑定
动态绑定
- 调用方法的时候,方法跟着对象走
静态绑定
- 调用属性的时候,属性跟着类型走
- 静态方法跟着类型走
instanceof运算符
用于判断对象的运行类型是否为 XX 类型或 XX 类型的子类型
- 由于向下转型时,容易发生ClassCastException类型转换异常,所以在进行向下转型之前,利用instanceof来进行判断
代码展示
public class Duotai {
public static void main(String[] args) {
Animal animal=new Dog();//向上转型
animal.eat();
Dog dog=(Dog)animal;//向下转型
dog.run();
}
}
class Animal {
public void eat() {
System.out.println("吃东西");
}
public void sleep() {
System.out.println("在睡觉");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("狗狗在吃东西");
}
public void run() {
System.out.println("狗狗跑的飞快。");
}
}