Java 面向对象 02 继承&抽象类

1 继承

在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称为子类,现有类称作父类,子类会自动拥有父类的所有可继承的属性和方法。

1)格式

class 子类名 extends 父类名 { }

2)继承的好处和注意事项

好处:

  • 提高了代码的复用性,提高软件开发效率
  • 使类与类产生了关系,提供了多态的前提

注意:

  • Java中,类只支持单继承,一个类只能有一个直接父类
  • 多个类可以继承一个父类
  • 可以有多层继承,例如c类继承b类,b类又可以继承a类,此时,c类也可以作为a类的子类。
  • 子类和父类是一个相对的概念,一个类是某个类的父类的同时,也可以是另一个类的子类。

3)子父类中成员变量的特点

  • 若子类父类中出现不同名的成员变量,则子类可以顺利访问父类的成员变量。当子类父类中的成员变量名字相同时,在子类中想要方位父类的同名成员变量,则要使用关键字super(super.父类中成员变量)。
  • 父类中的成员变量是非私有的,子类中可以直接访问。若父类中的成员变量是私有的,则子类不能直接访问。

4)子父类中成员方法特点

  • 当在程序中通过对象调用方法时,会现在子类中寻找相应的方法,若子类中没有,则会去父类中寻找并执行。
  • 当子类中出现与父类中一样的方法时,会出现覆盖操作,称为override(重写)。
  • 在子类中访问父类的成员方法时,要加上关键字super(super.父类的成员方法)。
class Phone{
    public void sendMessage(){
       System.out.println("发短信");
    }
    public void call(){
        System.out.println("打电话");
    }
    public void showNum(){
        System.out.println("显示来电号码");
    }
}
// 智能手机类
class NewPhone extends Phone{
    public void showNum(){
        // 调用父类已经存在的功能
        super.showNum();
        // 添加自己特有的新功能
        System.out.println("显示来电姓名");
        System.out.println("显示头像");
    }
}

方法重写注意事项:

  • 子类方法覆盖父类方法时,必须要保证权限大于等于父类权限。(指修饰符)
  • 方法的返回值类型、方法名、参数列表要一样。

2 抽象类

1)产生背景

当编写一个类时,往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,这些方法都有具体的方法体。
但是,有时候某个父类只是知道子类应该包含怎样的方法,但是无法准确知道子类如何实现这些方法。比如一个图形类有求周长的方法,但是不同的图形求周长的算法不一样。

抽象方法:方法功能声明相同,但方法功能主体不同,则抽取出方法声明,不抽取方法主体。

抽象类:被关键字abstract修饰

2)定义格式

// 抽象方法定义格式
public abstract 返回值类型 方法名(参数);
// 抽象类定义格式
abstract class 类名{}

示例:

// 抽象类
abstract class Developer{
    // 定义抽象方法
    public abstract void work();
}

class JavaEE extends Developer{
    public void work(){
        System.out.println("我是JavaEE工程师");
    }
}

class Android extends Developer{
    public void work(){
        System.out.println("我是Android工程师");
    }
}

3)抽象类的特点:

  • 抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。
  • 抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
  • 只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
  • 抽象类一定是个父类。
  • 抽象类可以不定义抽象方法。
  • 抽象关键字abstract不可以和关键字private、final、static共存。私用方法子类无法继承,也不能覆盖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值