黑马程序员——java面向对象-继承

——- android培训java培训、期待与您交流! ———-
一、 面向对象
面向对象设计程序的思想,执行变指挥
三大特征 封装 继承 多态
1. 继承
1.1 继承由来
多个类中,出现了相同的成员,代码重复就很高
例:以下程序代码重复过多,将相同的内容抽取来,形成另外的一个类,人类

class Teacher extends Person{
String name;
int age;
public void eat(){}
public void teacher(){}
}

class Student extends Person{
String name;
int age;
public void eat(){}
public void study(){}
}

子类共性抽取出父类,产生类和类之间的继承关系
让老师类,和学生类,都是使用人类中的成员,减少代码
使用 extends关键字写继承

class Person
{
    String name;
    int age;
    public void eat(){}
}
class Teacher extends Person
{
    public void teacher(){}
}

class Student extends Person
{
    public void study(){}
}

好处: 代码减少,扩展性强,导致了多态
弊端:类耦合性强

1.2 继承特点
1——单继承
一个类只能同时继承一个父类,不能同时继承多个类
单继承为什么要这样设计:避免程序的安全问题
如果多继承,父类中出现了相同方法,子类中不能判断调用的是谁
Java设计的时候,取消了多继承
2——多层继承
多层继承,多重继承,不等于多继承类和类之间可以进行层层继承
A 是 B的父类,B是C的父类 C是D的父类
1.3 继承体系
类之间的关系 is … a
顶层类,是整个体系最共性的,底层类是整个体系最多,既有共性又有特性
学习顶层,使用底层

  1. 成员变量
    2.1 子类有用子类,子类没有用父类
    2.2 子类中super.调用父类成员变量
    super 表示的意义,父类存储空间的标识
    调用父类静态成员,使用类名调用
class Fu
{
     int x = 1 ;
}
class Zi extends Fu
{
     int x = 2;

    public void show(){
       int x = 3 ;
       System.out.println(super.x);
    }
}

class ExtendsDemo3 
{
    public static void main(String[] args) 
    {
        Zi z = new Zi();
        z.show();
        System.out.println(z.x);
    }
}
  1. 成员方法
    3.1 子类覆盖父类方法
    成员方法,如果子类有,运行子类,如果子类没有,运行父类
    子类和父类中出现了一模一样的方法
    方法的另一个特性,子类重写父类方法
    3.2 权限大于等于父类,方法声明要一致
    但是子类重写父类方法,必须保证子类方法权限大于或者等于父类方法权限
    public > protected > 默认 >private
    3.3 案例,手机扩展案例
class Phone
{
    //打电话功能
    public void call(){
      System.out.println("拨号打电话");
    }
    //接电话功能
    public void receive(){
       System.out.println("铃声");
       System.out.println("显示号码");
    }
}

class NewPhone extends Phone
{
    //打电话功能,手机拿在手上,就可以拨号
    public void call(){
        //拨号功能,父类已经实现了,子类没有必要自己在做了
        //直接使用父类的功能
        //调用父类的 call方法
        super.call();
    }

    //接电话功能
    public void receive(){
        //铃声和号码显示,父类中已经实现过了,子类没有必要自己写
        super.receive();
        System.out.println("彩铃");
        System.out.println("大头像");
        System.out.println("归属地");
    }


}
class ExtendsTest 
{
    public static void main(String[] args) 
    {
        //创建手机对象,调用方法
        Phone p = new Phone();
        p.call();
        p.receive();
        System.out.println("=======================");
        NewPhone np = new NewPhone();
        np.call();
        np.receive();
        //System.out.println("Hello World!");
    }
}
  1. 构造方法
    创建子类对象的时候,父类构造方法也运行了
    如果父类中重载了很多构造方法,对于子类的构造方法来讲
    只要访问到其中一个即可
    总结子类父类构造方法的特点
    4.1 子类所有构造方法第一行就是super(),调用父类空参数构造方法
    4.2 如果父类中没有空参数构造方法,子类构造方法必须手写super传递参数,否则编译失败
    4.3 子类构造方法写this或者super,选择一个,保证子类可以间接或者直接访问过父类空参数构造
    子类所有构造方法,无论如何必须访问过父类构造方法
class Fu
{

    Fu(int a){
      System.out.println("父类构造方法");
    }
}
class Zi extends Fu
{
    Zi(){
      this(false);
      System.out.println("子类构造方法");
    }

    Zi(boolean b){
      super(0);
    }
}

class ExtendsDemo5
{
    public static void main(String[] args) 
    {
        new Zi();

    }
}

这是学习面向对象继承部分的总结,以及部分典型的代码。


版权声明:本文为qqyy789456原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。