zoukankan      html  css  js  c++  java
  • Java基础 Day09(继承)

    继承:类与类的关系,继承的设计原理是为了简化代码的书写,提高代码的复用性。

    一、如何使用继承

      在定义类时使用extends关键字 跟父类名。

    public class Student extends Person{
    }

    二、继承的特点

      1、没有父类的类称为根类,Java中根类是Object
           2、继承的上层:父类        继承的下层:子类
           3、继承的内容,所有的成员变量(私有的不能直接访问)和方法(除了构造方法)
           4、Java中的继承为单继承!!! 你的亲生父亲只有一个!
           一个类可以有多个子类,但是一个类有一个父类!
           5、继承是单向的,不能相互继承
           6、继承有传递性 Person Student CollegeStuden只能是
           大学生继承学生,学生继承人类,那么大学生就具有学生和人类的所有属性和方法
           7、子类如果不满意父类的方法实现,可以重写。

        7.1>重写的关键字:@Override

        7.2>重写的方法必须与父类的一致,参数数量、类型、顺序,方法名、返回值所有信息都一致!

        7.3>只有父类的实现,在重写方法中只有super

        7.4>既有子类实现又有父类实现,先写super再写子类内部实现.

        7.5>子类构造方法执行时,优先调用父类的无参构造方法

        7.6>父类中如果存在有参的构造方法,子类在定义有参构造方法时,优先执行父类中的有参构造方法,来初始化公共的属性
          然后再初始化自身独有的属性,从而完成所有属性的初始化.

    父类中 name age
    子类继承 id 
    public Student(String name, int age, int id) {
        super(name, age);
        this.setId(id);
    }

        7.7>构造方法的作用是创建对象
          有参构造方法:创建对象的同时为对象属性进行赋值

    父类内部
    public void sayHi() {
        System.out.println("你好");
    }
    子类继承之后
    @Override
    public void sayHi() {
        System.out.println("Hello");
    }

        7.8>如果子类没有重写父类中的方法,那么子类调用继承方法时,走的是父类中的实现

      8、只有子类的实现,在重写方法中没有super

    //创建一个父类水果类
    public class Fruit {
        private String color;
        private String variety;//种类
        private double weight;
        public String getColor() {
            return color;
        }
        public void setColor(String color) {
            this.color = color;
        }
        public String getVariety() {
            return variety;
        }
        public void setVariety(String variety) {
            this.variety = variety;
        }
        public double getWeight() {
            return weight;
        }
        public void setWeight(double weight) {
            this.weight = weight;
        }
        public Fruit() {
            System.out.println("Fruit类的构造方法执行了");
        }
        public Fruit(String color, String variety, double weight) {
            super();
            this.color = color;
            this.variety = variety;
            this.weight = weight;
        }
    //创建一个子类Apple子类
    public class Apple extends Fruit{
    
        private double price;
        private String smell;//味道
        /*
             无参构造方法一定要提供
             当子类执行无参构造方法时,首先会去调用父类中的
             无参构造方法,当父类中提供了有参构造时无参构造
             就不会默认提供,而如果没有手动的书写无参构造,
             子类一旦继承就会报错!!
         */    
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        public String getSmell() {
            return smell;
        }
        public void setSmell(String smell) {
            this.smell = smell;
        }
        public Apple() {
            super();
            System.err.println("Apple的构造方法执行了!");
        }
        /*public Apple(String color, String variety, double weight) {
            super(color, variety, weight);
            // TODO Auto-generated constructor stub
        }*/
        public Apple(String color, String variety, double weight, double price, String smell) {
            super(color, variety, weight);
            this.price = price;
            this.smell = smell;
        }
    //测试类
    public class InitialApple {
        public static void main(String[] args) {
            Apple apple = new Apple();
            Apple apple1 = new Apple("红色", "苹果", 1.1, 9.0, "甜");
            System.out.println(apple1);
        }

    三、final关键字

        1、final修饰类,则该类不允许被继承
             2、final修饰方法,则该方法不允许被覆盖(重写)
             3、final修饰属性(成员变量)则该属性不会隐式的初始化
             (类的初始化属性必须有值)
             或者在构造方法内部进行初始化(但是两者选择其中一种为其给初值)
             4、final如果用来修饰变量,则该变量只能赋值一次,即变为常量。

  • 相关阅读:
    ORACLE 删除重复的数据
    Linux查看某个文件 单个字符的 个数
    通过虚拟机增加Linux的磁盘(分区容量)
    redheat7 sd 0:0:0:0: [sda] Assuming drive cache: write through(未解决)
    安装数据库Typical path for xclock: /usr/X11R6/bin/xclock 错误问题
    解决Visual Studio 2015启动慢的问题
    使用Discuz!自带参数防御CC攻击以及原理
    mysql 去除特殊字符和前后空白字符
    最新版的Chrome 69.0 设置始终开启flash而不是先询问
    DNS_PROBE_FINISHED_NXDOMAIN 问题解决
  • 原文地址:https://www.cnblogs.com/aa1869/p/10638705.html
Copyright © 2011-2022 走看看