Java面向对象(二)——抽象类、接口、多态

一:super和this关键字

this是自身的一个对象,代表对象本身

this:当前对象

super:父类对象

super可以理解为是指向自己超(父)类对象,这个超类指的是离自己最近的一个父类。

用法:

this.成员变量()

super.成员变量()

this.成员方法名()

super.成员方法名()

代码示例:


public class People{
    public void study(){
        System.out.println("会学习");
    }
}
 
 
 
 
public class Student extends People{
    public void study(){
        System.out.println("女孩在教室里学习");
    }
    public void test(){
        this.run();//调用本类的方法
        super.run();//调用父类的方法
    }

二:抽象类 

抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类

抽象类的存在不是为了创建对象,是为了让子类继承用的。

使用abstract关键字修饰的类

定义:

抽象方法:没有方法体的方法。

抽象类:包含抽象方法的类。

抽象类的注意事项

        1,抽象类不能实例化(不能创建对象)

        2,抽象类中不一定有抽象方法,也可以有实例方法。但有抽象方法的类一定是抽象类

        3,可以有构造方法

        4,子类继承了抽象类,则一定要重写/实现其中的抽象方法,如果没有实现父类的抽象方法,则子类也要变成抽象类

三:接口

概念:接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7),默认方法和静态方法(JDK 8),私有方法(JDK 9)。

接口使用interface关键字

口中的方法都是抽象方法,所以接口中的方法不能有方法体。

类和类之间叫做继承,类和接口之间叫做实现。

定义格式:

public interface 接口名称 {
// 抽象方法
// 默认方法
// 静态方法
// 私有方法
}

接口与抽象类的区别?

抽象类中有构造方法,接口中无构造方法。

接口和接口之间支持多继承,类和类之间只能单继承。、

一个类可以实现多个接口,但只能继承一个抽象类。

四:多态

定义:是指同一行为,具有多个不同表现形式。

多态的前提:

1,发生在有继承或者实现接口情况下

2,在子类中对方法进行了重写

3,父类引用指向子类对象 父类类型  变量名=new 子类对象()

代码示例:


/*多态的前提:继承+重写*/
//创建父类Animal
class Animal{
    //创建父类的普通方法
    public void call(){
        System.out.println("动物叫");
    }
}
//创建子类Cat 
class Cat extends Animal{
    //添加重写的方法
    public void call(){
        System.out.println("喵喵叫!!!");
    }
    //添加子类的特有功能
    public void jump(){
        System.out.println("小猫跳");
    }
}
//创建子类Dog 
class Dog extends Animal{
    //添加重写的方法
    @Override
    public void call(){
        System.out.println("汪汪叫!!!");
    }
    //添加子类的特有功能
    public void run(){
        System.out.println("小狗跑");
    }
}
 
public class Test {
    public static void main(String[] args) {
        //创建对象
        Animal a = new Animal();
        Cat c = new Cat();
        Dog d = new Dog();
        //调用的是父类自己的功能
        a.call();
        //调用的是子类重写后的功能
        c.call();
        d.call();
        /*父类对象不可以使用子类的特有功能*/
        //a.jump();//报错,Animal类里并没有这个方法
        //a.run();//报错,Animal类里并没有这个方法
        c.jump();//子类可以调用自己的功能
        d.run();//子类可以调用自己的功能

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值