JAVA SE (8)

–> JAVA SE (7)

从这篇起,进入java面向对象。

继承

继承的意义(为什么要有继承这个概念):避免重用代码

继承:从已有的类中派生出其他类。子类继承父类的特征和行为,使得子类对象具有父类的实例域方法
继承符合的关系:is a,表现在是父类更通用,子类更具体。
注意:java不支持多继承,但支持多重继承

继承的特性:

  • 子类拥有父亲的非private的属性和方法(子类不能直接继承父类的private属性和方法,但是父类private的成员在子类中仍然是存在的,只是子类不能直接访问)
  • 子类可以用自己的方式实现父类的方法(灾难的根源;子类中若定义一个父类已经存在的成员变量,这两个变量毫无关系)

继承关键字
extends和implements实现继承,所有的类均是继承于ava.lang.Object。若一个类没有继承的这两个关键字,则默认继承Object(Object类在java.lang包内,不需要import)。

  • extends只能跟一个父类
  • implements可以跟多个接口

super和this

  • super:实现对父类成员的访问。子类调用父类的方法(子类覆盖了父类的方法时),即需要使用super。
  • this:指向自己的引用

final
被final修饰的类为最终类,不能被继承;用于方法,表此方法不能被重写,修饰实例变量,不能被修改。
无论是引用变量还是基本数据类型,final的作用都一样:变量理里面存放的值不能变。

  • 对于基本数据类型,存放的就是平常大家理解实实在在的值,如23,"TxL"等。
  • 对于引用类型,存放的就是一个引用,一个地址,指向某个数组或者对象。指向的对象不能变,如指向张三这个对象,但是他的属属性可以变,如
final Person p = new Person("TxL");
//此时不能对p重新进行赋值,如 p = new Person("ZZY");
//但你可以改变属性
p.setName("ZZY");

注意:被声明为final的类,其方法默认被final修饰,但是,实例变量没被final修饰。

构造器
子类不能继承父类的构造器,只是调用(唯一途径是使用super)。super语句,是子类构造方法的第一条语句,如不写,编译器会默认加上。
关于构造器:在构造一个子类对象时,父类的构造器在子类的构造器中被先调用。并且,在程序的运行过程中,子类对象的一部分空间存放的是父类对象–子类从父类继承,子类初始化过程中,可能会使用到父类的成员,所以父类的空间先被初始化。

  • 若父类的构造器带有参数,则必须在子类的构造器中显式的通过super调用父类的构造器并且配以适当的参数列表。
  • 若父类构造器没有参数,则在子类的构造器中不需要使用super调用父类构造器,系统自动调用无参构造器。

最后,在继承关系中,在调用方法或者类的成员变量时,java虚拟机会先检测当前的类(即子类)中是否含有该方法或者成员变量—若有,则执行子类的;否则的话执行父类的。
以下代码摘自菜鸟教程:

public class Start
{
    public static void main(String[] args)
    {
        Cat cat=new Cat("Jack","黑色");
        cat.eat();
        cat.run();
        cat.sleep();
    }

}

class Animal 
{
    String name;
    
    public Animal(){}//必须要写这个构造函数,不然Cat类的代码会出错
    
    public Animal(String name)
    {
        this.name=name;
    }
    
    void eat()
    {
        System.out.println(name+"正在吃");
    }
    
    void run()
    {
        System.out.println(name+"正在奔跑");
    }
    
    void sleep()
    {
        System.out.println(name+"正在睡觉");
    }
}

class Cat extends Animal
{
    String color;
    public Cat(String name,String color)
    {
        this.name=name;
        this.color=color;
    }
    void eat()
    {
        System.out.println(color+"的"+name+"正在吃鱼");
        }
}

结果

黑色的Jack正在吃鱼
Jack正在奔跑
Jack正在睡觉

这种现象叫重写(和后面的多态有这紧密的关系)。

JAVA SE (9)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值