Java继承、接口与多态

继承

要点

  • 子类是extends父类出来的。
  • 子类会继承父类所有public类型的实例变量和方法,但不会继承父类任何的private类型的实例变量和方法。
  • 继承下来的方法可以被覆盖掉,但实例变量不能被覆盖。即是某个方法在子类中被覆盖过,调用时会使用覆盖过的版本。如果覆盖后想调用父类的方法,就要用super.method()。

继承的意义

  • 通过提取出类间共同的抽象性,可以排除重复的程序代码而将这个部分放在父类中。这样如果有共同的部分需要改动,就只会有一个地方改动,所有子类共享。
  • 继承可以确保某个父型之下的所有类都会有父型所持有的全部(可遗传的)方法,即通过继承来定义相关类间的共同协议。

多态

回顾:一般声明引用和创建对象的方法

多态1

多态的运用

多态2

运用多态时,引用类型可以是实际对象的父类

在方法中,参数的引用类型也可以是实际参数的父类

综上所述,通过多态,可以编写出引进新型子类也不必修改的程序。

覆盖的规则

要覆盖父类的方法时:

  • 参数必须要一样,且返回类型必须要兼容
  • 不能降低方法的存取权限

方法的重载

重载只是刚好有相同名字的不同方法,与继承和多态无关。

接口和多态

抽象类和抽象方法

声明抽象类

abstarct public class Canine extends Animal
{
    public void roam() { }
}

public class MakeCanine {
    public void go() {
        Canine c;  //这是可以的,使用抽象类型来声明为引用类型给多态使用
        c = new dog();
        c = new Canine();//编译器不通过:无法创建出抽象类的实例
        c.roam() 
    }
}

抽象类除了被继承过之外,没有用途、没有值、没有目的。

抽象的方法

可以将方法标记为abstract,抽象的类表明该类一定被继承过,抽象的方法一定要被覆盖过。

抽象的方法没有实体。

public abstract void eat();

如果在一个类中声明了任何一个抽象的方法,就必须将该类也标记成抽象的。

Object类

Object类是所有类的源头,它是所有类的父类。

Object类中带有的部分方法

Object方法

使用Object多态

ArrayList<Object> myDogArrayList = new ArrayList<Object>();
Dog aDog = new Dog();
myDogArrayList.add(aDog);

Dog d = myDogArrayList.get(0) //无法通过编译!!!不管add进去的值是什么类型的,从ArrayList<Object>取出的值引用类型均为Object!!!  

接口(类似于纯抽象类)

接口的定义

public interface Pet {
    public abstract void beFriendly();
    public abstract void Play();
}

接口的实现

public class Dog extends Canine implement Pet {
    public void beFriendly() {……} //必须实现出Pet的方法
    public  void Play(){……} //必须实现出Pet的方法

    ……
}

接口的意义

接口

意义还是在于多态,用接口取代具体的子类或抽象的父类作为参数或返回类型,则可以传入任何实现该接口的东西,使用接口可以继承超过一个以上的来源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值