JAVA-继承
1.java支持单继承
2.B类继承于A类
- A类:父类,基类,超类,superclass
- B类:子类,subclass
3.java中如果没有显式继承于任何类,那么它默认继承于java.lang.Object类。
4.java中可以继承父类的哪些数据呢?
- 私有的不可以被继承
- 构造方法不支持继承
- 其他数据都可以被继承
JAVA-多态
多态语法机制
1.向上/向下转换
- 向下类型转换(upcasting):父类转化为子类,是自动类型转换 eg:Animal ani = new Cat();//合理:cat is an animal.
- 向上类型转换(downcasting):子类转换为父类,需要强制转换
2.多态的实现必须是继承的关系。
3.私有的不可以被继承
4.构造方法不支持继承
5.其他数据都可以被继承
**
静态绑定和动态绑定
**
**静态绑定:**发生在编译阶段,进行语法检查,检查通过才可以运行
**动态绑定:**发生在运行阶段
public class ExtendTest {
public static void main(String[] args) {
Animal ani = new Cat(); //cat is an animal.
/*java程序运行包括编译阶段和运行阶段
1.先编译后执行,编译不通过,就无法执行。
2.编译阶段先检查ani这个引用的类型是Animal,由于Animal.class字节码中包含doSome()方法,所以编译通过,称为静态绑定(只检查语法)。只有静态绑定成功才能运行。
3.在程序运行阶段,JVM堆内存中真是创建的是Cat对象,那么运行阶段后执行Cat对象的doSome()方法,这叫做动态绑定。
4.无论Cat里面有没有doSome()方法,运行阶段调用的Cat对象的doSome()方法。
*/
ani.doSome(); //运行阶段调用的Cat对象的doSome()方法。
//ani.catchMouse(); //**报错:该访问为什么不可以调用?**
//因为编译阶段检查到的ani是Animal类型,Animal.class字节码文件中没有catchMouse()方法,所以无法运行。编译失败,因此无法运行。
/*
什么时候需要向下转型?
1.调用的方法是子类中特有的,在父类中不存在,必须向下转型.
2.在进行强制转换之前,建议采用instanceof运算符进行判断
*/
if(ani instanceof Cat)
{
Cat c = (Cat)ani;
c.doSome();
} else if (ani instanceof Bird) {
Bird b = (Bird)ani;
b.doSome();
}else
{
}
}
}
class Animal{
public void doSome()
{
System.out.println("动物在走路");
}
public void haha()
{
}
}
class Cat extends Animal{
public void doSome()
{
System.out.println("猫在跑");
}
public void CatchMouse()
{
System.out.println("猫在捉老鼠");
}
}
class Bird extends Animal{
public void doSome()
{
System.out.println("鸟在飞");
}
public void DrinkWater()
{
System.out.println("鸟在喝水");
}
}