黑马程序员——————java中的继承和多态

来源:互联网 发布:知豆电动汽车价格表 编辑:程序博客网 时间:2024/06/18 14:18

------- 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();
}

}



------- android培训、java培训、期待与您交流! ----------