• Java学习笔记(九)——继承


    一、继承

    1、概念:

         继承是类于类之间的关系,是一种”is a ”的关系

    Ps: Java是单继承

    2、优势:

    (1)子类直接拥有父类的所有属性和方法(除了privata)

    (2)实现代码复用

    3、语法规则:

    image

    4、一个demo

    (1)动物类

    package com.cnblogs;
    
    public class Animal 
    {
        public int age;
        public String name;
        public void eat()
        {
            System.out.println("eat");
        }
    }

    (2)狗类

    package com.cnblogs;
    
    public class Dog extends Animal 
    {
        
    }

    (3)使用

    package com.cnblogs;
    
    public class Init {
    
        public static void main(String[] args) 
        {
            // TODO Auto-generated method stub
            Dog dog = new Dog();
            dog.eat();
            dog.name = "sdfsdf";
            dog.age = 20;
    
        }
    
    }

          子类可以直接使用父类除了private之外的成员。

    二、方法的重写

    1、定义:

        如果子类对父类的方法不满意,可以重写父类的方法,调用时优先使用子类的方法。

    2、语法规则:

    (1)返回值类型  (2)方法名  (3)参数类型和个数

    都要与父类继承的方法相同,才是方法的重写

    三、继承初始化顺序

    1、先初始化父类对象再初始化子类对象

    2、先执行初始化对象中属性,再执行构造方法中的初始化

    image

    四、final关键字

    1、final可以修饰类,方法,属性和变量

    (1)修饰类,则该类不允许被继承

    (2)修饰方法,则该方法不允许被覆盖(重写)

    (3)修饰属性,则该类的属性不会被隐式初始化,(类的初始化属性必须有值)或在构造方法中赋值

    (4)修饰变量,该变量的值只能赋值一次,就是常量

    五、super关键字

    在对象内部使用,可以代表父类对象

    1、访问父类的属性

    super.age;

    2、访问父类的方法:

    super.eat();

    3、子类的构造方法过程中必须条用其父类的构造方法。

    image

    写和不写super都行

    4、如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。

    5、如果显示的调用构造方法,必须放在构造方法的第一行

    6、如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。

    六、Java中的Object类

    1、Object类

         是所有类的父类,如果没有明确使用extends关键字确定标示继承另一个类,那么这个类默认继承Object类

    2、Object类中的toString()方法:

    (1)toString()方法

         返回对象的哈希code码,是唯一区分对象的标识

    (2)可以通过重写toString()方法显示对象的属性。

    (3)esplice提供的ISE方法:

    image

    image

    @Override
        public String toString() {
            return "Animal [age=" + age + ", name=" + name + "]";
        }

    于是乎,在mian中调用

    System.out.println(dog);

    结果为:

    image

    3、Object类中的equals()方法:

    (1)比较的是对象的引用是否指向同一块内存地址

              PS:Dog dog = new Dog();   中的dog只是一个指向dog对象的指针。

    (2)一般情况下,是比较两个对象的值是否相等,所以进行重写

    imageimage

    生成的代码:

    @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + age;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }//生成haxi码
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)             //如果是同一个对象,就是对的
                return true;
            if (obj == null)             //如果obj是空的,肯定不相等
                return false;
            if (getClass() != obj.getClass())    //判断类的对象是否相等
                return false;
            Animal other = (Animal) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }

    其中getClass()是得到类对象

    image

  • 相关阅读:
    Mysql安装
    Python的内存管理机制
    Ansible模块
    Redis持久化
    Linux——ansible(1)
    Flask
    Flask入门
    ajax处理回调函数,用ajax向后台发送数据
    数字类型钱币转换为大写
    ligerui多选动态下拉框
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4947081.html
Copyright © 2020-2023  润新知