------- android培训、java培训、期待与您交流! ----------
继承:
基本概念:
1.在java中用extends关键字标示继承关系。
2.在java中只支持单继承,不支持多继承,
不支持多继承的原因是多继承会存在安全隐患 如:
class A
{
public void show()
{
System.out.println("A");
}
}
|
class B
{
public void show()
{
System.out.println("B");
}
}
|
当一个类C同时继承A、B的话若调用show()方法就会产生安全隐患
3.java中是支持多层继承的,也就是一个继承体系。所以当我们在学习java的api时应该先查看父类的描述,
了解共性 的基本功能,儿具体调用时,要创建子类的对象,因为子类中有更多的方法可供使用,或者父类
不能创建对象比如说抽象类。
继承的好处:
1.提高了代码的复用性
2.让类与类之间产生了关系,有了这个关系才有了多态的特性。
继承中需要注意的是:
1.不要单纯为了获取其他类的功能简化代码而继承,必须是类与类之间有属性间的关系才能继承。
继承中子父类中成员的特点:
1.成员变量的特点:
class Fu { int num1=2; } class Zi extends Fu { int num2=5; } class ExtendsDemo { public static void main(String[] args) { Zi z=new Zi(); System.out.println(z.num1+"......"+z.num2); //打印结果是 2......5 } } |
class Fu
{ int num=2; } class Zi extends Fu { int num=5; } class ExtendsDemo { public static void main(String[] args) { Zi z=new Zi(); System.out.println(z.num); //打印结果是 5 } } |
class Fu { private int num=34; } class Zi extends Fu { int num1=3; } class DD { public static void main(String []args) { Zi z=new Zi(); System.out.println(z.num); }\\编译失败 } |
通过上面的三个示例我们总结一下继承中成员的特点:
子类可以访问父类的非私有的成员变量,当子父类中有相同变量名的成员时,
默认的是访问子类中的,若想访问父类中的则用super关键字,子类是不能访问父类中的私有变量的
2继承中成员函数的特点:
class Fu { public void show1() { System.out.println("父类中的show1()方法"); } public void show() { System.out.println("父类中的show()方法"); } } class Zi extends Fu { public void show() { System.out.println("子类中的show()方法"); } public void show2() { System.out.println("子类中的show2()方法"); } } class DD { public static void main(String []args) { Zi z=new Zi(); z.show();//打印的是:"子类中的show()方法"; z.show1();//打印的是:"父类中的show1()方法"; z.show2();//打印的是:"子类中的show2()方法"; } } |
3.继承中构造函数的特点:
class Fu { FU() { System.out.println("父类的构造方法运行"); } class Zi extends Fu { Zi() { System.out.println("子类的构造方法运行"); } } class DD { public static void main(String []args) { Zi z=new Zi(); } } //执行结构是: 父类的构造方法运行 子类的构造方法运行 |
在对子类对象进行初始化的时候,父类的构造函数也会运行,那时因
为子类的构造函数默认的第一行有一条隐式语句super();
多态:
多态可以理解为:事物存在的多种体现形态
如:
猫 x=new 猫();
我们也可以说猫是动物
动物 x=new 猫();
abstract class Animal { abstract void eat(); } class cat extends Animal { public void eat() { System.out.println("吃鱼"); } public void catchMouse() { System.out.println("捉老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨头"); } public void kanjia() { System.out.println("看家"); } } class DuoTai { public static void main(String[]args) { Ainmal a=new Cat();//这是向上转型 a.eat(); //调用的是父类中定义的方法 Cat c=(Cat)a; //多态后无法使用子类中的特有的方法,若想要 使用特有方法则向下转型 c.catchMouse(); } } |