为了能到远方,脚下的每一步都不能少.|

Blue Mountain

园龄:10年7个月粉丝:572关注:0

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

本文作者:Blue Mountain

本文链接:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4947081.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Blue Mountain  阅读(320)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.