Java 面向对象_继承

继承

  在继承的关系中,子类就是一个父类,也就是说,子类可以被当做父类看待,例如:父类是员工,子类是程序员,那么程序员就是一个员工,代码示例:

// 员工类
public class Employee{
    String name;
    int age;
}

// 程序员类(继承员工类)
public class Programer extends Employee{
} 

// 主方法
public class Extends {
    public static void main(String[] args) {
        Programer coder = new Programer();
        coder.name = "johny";
        coder.age = 20;
        System.out.println(coder.name + " " + coder.age);  // johny 20
    }
}

  在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:

    1. 直接通过子类对象访问成员变量(优先使用自己的,没有则向上找)
    2. 间接通过成员方法访问成员变量(看方法属于谁,就优先用谁的,没有则往上找,找不到就报错)

  在父子类的继承关系中,创建子类对象,访问成员方法的规则:

    1. 创建的对象是谁,就优先用谁(优先使用自己的),如果没有就向上找

  无论是成员方法还是成员变量,如果没有都是向上找父类,绝不会向下找

区别子类方法中重名的三种变量

  局部变量:              直接写成成员变量名

  本类中的成员变量:this.成员变量名

  父类中的成员变量:super.成员变量名

继承中方法的覆盖

  覆盖与方法的重载不同,同样是方法名相同,但覆盖指接收的参数也相同

// 父类
public class Phone {
    public void call(){
        System.out.println("call");
    }

    public void send(){
        System.out.println("send");
    }
}

// 子类
public class NewPhone extends Phone{
    // 方法权限必须大于等于父类
    public void call(){
        // 调用父类方法
        super.call();
        // 添加自己的逻辑
        System.out.println("show picture");
    }
}

public class DemoCover {
    public static void main(String[] args) {
        NewPhone newPhone = new NewPhone();
        newPhone.call();  // call \n show picture
    }
}

  注意事项:

    1. 在子类方法前面写上 @Override,用来检测是不是有效的覆盖重写
    2. 子类方法的返回值必须小于等于父类方法的返回值范围(例如:子类返回String,父类返回Object)
    3. 子类方法的权限必须大于等于父类方法的权限修饰符

        权限修饰符:public > protected > (default) > private

继承中构造方法的访问特点

  1. 子类构造方法中有一个默认隐含的 "super()" 调用,所以一定是先调用的父类构造,再调用的子类构造
  2. 子类构造可以通过 "super" 关键字来调用父类的重载构造(当父类含有多个构造方法)
  3. super 的父类构造方法调用,必须是子类构造方法的第一条语句,且只能调用一次 super 构造

  子类必须调用父类的构造方法,不写则是默认的 super(),写了就调用指定的 super

super 关键字的三种用法

  1. 在子类的成员方法中,使用 super 得到父类的成员变量
  2. 在子类的成员方法中,使用 super 访问父类的成员方法
  3. 在子类的构造方法中,使用 super 访问父类的构造方法

this 关键字的三种用法

  super 关键字用来访问父类内容,而 this 关键字用来访问本类内容

  1. 在本类的成员方法中,使用 this 得到本类中的成员变量
  2. 在本类的成员方法中,使用 this 得到本类中的成员方法
  3. 在本类的构造方法中,使用 this 调用本类的重载构造方法(另一个构造方法)

    this(…) 调用也必须是构造方法中的第一条语句,且只能使用一次

    super 和 this 两种构造使用,不能同时使用

继承的三个特点图解

抽象方法和抽象类

  抽象方法:就是在 void 前面加上 abstract 关键字,然后去掉大括号,直接分号结束

  抽象类:抽象方法所在的类,必须是抽象类,在 class 前面加上 abstract 关键字

// 这是一个抽象类
public abstract class Animal{
    // 这是一个抽象方法,代表吃东西,具体吃什么?不知道
    public abstract void eat();
}

  如何使用抽象类和抽象方法?

    1. 不能直接 new 抽象类,必须使用子类继承抽象父类
    2. 非抽象子类必须覆盖重写父类的所有的抽象方法
    3. 创建非抽象子类对象时进行使用

      // 抽象父类
      public abstract class Animal{
          public Animal(){
              System.out.println("抽象父类构造方法执行");
          }
          // 抽象方法
          public abstract void eat();
          public abstract void sleep();
      }
      
      // 抽象子类
      public abstract class Dog extends Animal{
          @Override
          public void eat(){
              System.out.println("dog eat meat");
          }
      }
      
      // 间接子类
      public class JinMao extends Dog {
          @Override
          public void sleep(){
              System.out.println("JinMao in his sleeping");
          }
      }
      public class HaShiQi extends Dog {
          @Override
          public void sleep(){
              System.out.println("HaShiQi in his sleeping");
          }
      }
      
      public class DemoAbstract{
          public static void main(String[] args){
              JinMao jinMao = new JinMao();
              jinMao.eat();
              jinMao.sleep();
      
              HaShiQi haShiQi = new HaShiQi();
              haShiQi.eat();
              haShiQi.sleep();
          }
      }
      
      // 执行结果
      抽象父类构造方法执行
      dog eat meat
      JinMao in his sleeping
      抽象父类构造方法执行
      dog eat meat
      HaShiQi in his sleeping

发红包的案例

原文地址:https://www.cnblogs.com/kaichenkai/p/10797884.html

时间: 2024-10-09 00:42:13

Java 面向对象_继承的相关文章

08 Java面向对象之继承

JavaSE 基础之八 08 Java面向对象之继承 ① 对象与对象之间的关系 关联关系:最弱的一种关系(学生类中包含了老师) 继承关系:比较强的一种关系,is-a,你能够用:什么是什么说通 聚合关系:比较强的关系,聚集和组合,什么是什么的一部分 实现关系:子类要去实现父接口 ② 继承的语法实现 class Animal{ } class rabbit extends Animal{ // rabbit称为子类,Animal称为父类 } ③ 继承的特性 子类继承父类,子类可以拥有父类的所有属性(

面向对象_继承

一.继承的基本概念: 1.继承是面向对象的三大特性之一  2.被继承的类称为父类(超类),继承父类的类称为子类(派生类)  3.继承是指一个对象直接使用另一个对象的属性和方法(继承之后才能使用) 4.通过继承可以实现代码重用 二.使用继承的要求 1.将每个类的共性提取出来单独放在一个类中来描述 2.然后让这个类与其他每个类之间有点关系这样就可以了 3.注意:千万不要为了获取其他类的功能,简化代码而继承 4.必须是类与类之间有所属关系才可以继承 5.例如:将学生和工人的共性(共同属性,共同方法)描

Java面向对象的继承

继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有属性和方法,private的除外,优点就是可以提高代码的复用性,简单的继承实例如下: 1 public class Dog extends Animal { 2 //Dog类继承了Animal类中的所有非私有的属性和方法,可以直接使用了 3 } 使用继承还是挺简单的 方法重写 如果子类对继承父类的方

JavaSE入门学习15:Java面向对象之继承

今天我们来看Java三大面向对象特性中的继承. 一Java继承 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承可以理解为一个对象从另一个 对象获取属性的过程. 如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来的.在Java中,类的继 承是单一继承,也就是说,一个子类只能拥有一个父类. 继承中最常使用的两个关键字是extends和implements.这两个关键字的使用决定了一个对象和另一个对象是否是 IS-A(是一个)关系.通过使

Java面向对象之继承

Java 中的继承规则: 1.子类继承父类所有的成员变量和成员方法,但是不能继承父类的构造方法. 2.子类虽然继承了父类的成员变量,但是子类不能直接访问父类的私有变量,可以通过getter/setter()方法进行访问 3.子类对父类构造函数的调用规则: a.子类的构造方法首先必须调用父类的构造方法. b.如果没有显示指定,子类的构造方法会默认的调用父类中的无参构造方法, 1 public class Animal { 2 public Animal() { 3 System.out.print

Java 面向对象之继承从哪来,为什么用,怎么用?

首先看一张图片: 现在有两个类,Student和Worker,为了提高复用性.只建立一份代码,让一个类和另一个类产生关系就可以了,这种关系就是:继承. 但我们发现这两个类没有继承关系,但是它们有共性的内容,我们可以找到它们的共享类型,→无论是学生还是工人,都是Person,Person都具备着name和age.即: 在代码中通过关键字 继承(extends),让学生和工人与Person产生关系 class Person { String name; int age; } class Studen

Java面向对象,继承,多态

1,继承 Java 中通过 extends 关键字可以继承一个类,implements可以继承多个接口.继承允许创建等级层次的类. 继承的机制提高了代码的复用性,让类与类之间产生了关系,有了这个关系,才有了多态的特性. 注:Java支持单继承,但是可以多层继承. 子类可以拥有父类的非private的方法和属性,子类可以继承父类的方法,也可以重写父类的方法,还可以对父进行拓展. 增加了类之间的联系,即提高了耦合. 一般格式为: class 父类 { } class 子类 extends 父类 {

JavaSE知识-08(面向对象_继承&方法&final)

代码块的概述和分类 根据其位置和声明的不同,代码块可以分为局部代码块,构造代码块,静态代码块,同步代码块. 常见代码块的应用 a:局部代码块 在方法中出现:限定变量生命周期,及早释放,提高内存利用率 b:构造代码块 (初始化块) 在类中方法外出现:多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行 c:静态代码块 在类中方法外出现,并加上static修饰:用于给类进行初始化,在加载的时候就执行,并且只执行一次. 一般用于加载驱动 class Demo1_Code {

面向对象_继承之后类成员的特点

类中的成员:变量,函数,构造函数 1.变量 如果子类中出现非私有的同名成员变量时 子类要访问本类中的变量用this,this代表的是本类对象的引用 子类要访问父类中的同名变量,用super,super代表的是父类空间 1 public class ExtendsDemo3 { 2 public static void main(String[] args) { 3 Zi z=new Zi();//建立了子类对象,加载子类,但在加载子类前会先加载父类 4 z.show(); 5 //System.