理解:继承可以理解为一个对象获取属性的过程。如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来。 在java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类。
关键字:extends和implements。
这两个关键字的使用决定了一个对象和另一个对象是否是IS-A(是一个)关系。
例:
// A.java
public class A {
private int i;
protected int j; public void func() { }
} // B.java
public class B extends A {
}
注意:上例说明B由A继承而来,B是A的子类。作为子类,B的实例拥有A所有的成员变量,但是对于private的成员B却没有访问权限,这保 证了A的封装性。
IS-A关系:一个对象是另一个对象的分类!我们通过使用instanceof 操作符,能够确定Mammal IS-A Animal。
class Animal{ }
class Dog extends Animal{ } class Cat extends Animal{ } class Pig extends Animal{ } public class AnimalTest{
public static void main(String args[]){
Dog dog=new Dog();
Cat cat=new Cat();
Pig pig=new Pig();
System.out.println(dog instanceof Animal);
System.out.println(cat instanceof Animal);
System.out.println(pig instanceof Animal);
}
}
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAT0AAABGCAIAAAAxa9R8AAACGElEQVR4nO3dMW7bMBiG4Zytp+jeodfpHbp06tatgw/gRfCkI+QW3QzB/BkLCCnoq59nCCIisp0AL0QwlP12u92u1+v7j+9vn3a5XO5ftyNxHl72Yb/Ff/Cn4yAzur37/GOWz1Ka9yxjH/lsT0qkgd0CB9Et5FnXdVkW3UIS3UIe3UIe3UIe3UKetlv/PISz0y3k2XZb7kDaHrbf3x+nPLT1B6bYeb19KLn8yafjwBjrui7Lrz3dPh3ULRxkUrfllBsYY/88+elg73oLDPbtd7fbh3Wm9tzeupR5MsxV7rso15PLGe92vHfW1NcPr8h+KcijW8ijW8ijW8ijW8ijW8jjfeEgj24hj24hT9utHU5wdrqFPNtuy63I7Q7kdjdy79D+ZJhi5/W2vN2nd9+P+4Fgrv3dPh3ULRxkUrfllBsY44DrLTDYB90+rDO15/bWpcyTYa5y30W5nlzOeLfjvbOmvn54RfZLQR7dQh7dQh7dQh7dQh7dQh7dQh7dQh7vCwd5dn4eH3AiuoU8227LrcjtDuR2N3Lv0P5kmGL/51a3t/v07vtxPxDMdcDnzesWBpvUbTnlBsY44HoLDPZBtw/rTO25vXUp82SY62+176JcTy5nvNvx3llTXz+8orJb4NR0C3m+fvm5LH90C0ncVwB5dAt5dAt5dAt5dAt5dAt5dAt5vC8c5NEt5NEt5NEt5NEt5NEtxPkH1esM3xAwss4AAAAASUVORK5CYII=" alt="" />
我们再来看下implements关键字是怎样使用来表示IS-A关系。
Implements关键字使用在类继承接口的情况下, 这种情况不能使用关键字extends。
interface Animal{} class Mammal implements Animal{}
class Dog implements Animal{} public class AnimalTestTwo {
public static void main(String args[]){ Mammal m = new Mammal();
Dog d = new Dog(); System.out.println(m instanceof Animal);
System.out.println(d instanceof Animal);
}
}
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAAA5CAIAAADWaMCfAAAB+klEQVRoge2YsWrCQBjHfaFG7x2ciogd+ggVpGg7+AQtgnTo4iQ4uCjWdygoOogIIoJODjdIEAKBIM4dLGn6z2lEo0n0/xvEfNxdLj++7+642GazWa/XlmWZpmkYhq7rUsp2ux07mU6nY/86I2HnAkZsTh9T+RYlx494PiNRhUYQGkFoBKERhEYQGkE8jUTjWOUjNILsMaI8BTof3f/tYZWP5zu5+slxOQKOlC094yFFCCGEKLQs0+yX0891XZdSVoqPdoNdRjyDUTWyGX5mxEtrmyPdcipXPzBHPIPuQotG4Qjx+uWomu9SKlvz34hfs70EQ/c6Ussmk0m7gfLDPI0oF5o9fUPEgxBCiESi0Gzm4/G4puVqrhOacq9R5r8zvqvXWT/HB/7vNd1SSmHkttjuNYlCi0Z+UedIpRj0vILjN0cSmY/+n5H3p6R3z2vFkSP9cjquadrd/VuFVWNZltnMp8td9+57c/B+BKERhEYQ3hghNILwDg3hHRpytBHPII3sM6IswJBy+RwJO4cbgZXSPdSulfXaqiZ223doPLPSiBsaQWgEoRGERhAaQWgEoRGERpDZbDadTieTyXg8Ho1Gg8Gg1+tVq9Wg5xUchmGsVitd15fLpZRysVjM5/NGoxH0vIKDRhAaQWgEoRGERhAaQWgEoRGERoAfCczupPn/nykAAAAASUVORK5CYII=" alt="" />
Java只支持单继承(继承基本类和抽象类),但是我们可以用接口来实现(多继承接口来实现),脚本结构如:
public class Apple extends Fruit implements Fruit1, Fruit2{}
一般我们继承基本类和抽象类用extends关键字,实现接口类的继承用implements关键字。