封装
使用类设计对象;
将需要处理的数据以及处理方法设计到对象的类中。
优点:更好的维护数据;
使用者无需关心内部实现,只要知道如何使用即可。
继承
让类与类之间产生一种关系——子父类关系,子类可以直接使用父类中的非私有成员
优点:
1)继承可以让类与类之间产生关系,子父类关系,产生子父类后,子类则可以使用父类中非私有的成员。
2)提高了代码的复用性(多个类相同的成员可以放到同一个类中)。
3)提高了代码的维护性(如果方法的代码需要修改,修改一处即可)。
多态
1.概念
同一个对象在不同时刻表现出来的不同形态。
2.前提
要有继承或实现关系;要有方法重写;要有父类引用指向子类对象。
3.成员访问特点:
成员变量编译看父类,运行看父类。
成员方法编译看父类,运行看子类。
4.好处
提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作。
5.弊端
不能使用子类的特有成员。
6.转型
向上转型:父类引用指向子类对象就是向上转型。
向下转型:格式:子类型 对象名 = (子类型)父类引用
Animal父类
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println("这个是父类的吃饭方法");
System.out.println("父类"+this.name+"正在吃饭");
}
}
Bird 子类
public class Bird extends Animal{
public Bird(String name) {
super(name);
}
public void fly(){
System.out.println("鸟在飞");
}
@Override
public void eat() {
System.out.println("子类鸟"+this.name+"正在吃饭");
}
}
Dog子类
public class Dog extends Animal{
public Dog(String name) {
super(name);
}
public void run() {
System.out.println("我是一只小狗,我在跑跑跳跳");
}
@Override
public void eat() {
System.out.println("子类狗"+this.name+"正在吃饭");
}
}
实现类
public static void main(String[] args) {
// 向上转型 父类的引用指向子类
// 父类的类型 对象名 = new 父类类型
Animal yuanyuan = new Bird("圆圆");
Animal animal2 = new Dog("豆豆");
yuanyuan.eat();//子类鸟圆圆正在吃饭
animal2.eat();//子类狗豆豆正在吃饭
// 先判断一下这个数据类型是否是对应-的类型
// ClassCastException
// 子类类型 子类名 = (子类类型)父类名,向下转型
if(yuanyuan instanceof Bird) {
Bird b = (Bird)yuanyuan;
b.fly();//鸟在飞
}else {
System.out.println("不是对应的数据类型");
}
}