继承,super,重写,抽象

本文介绍了Java中的继承概念,强调了单继承特性以及如何通过extend关键字实现。此外,详细解释了super关键字的用途,包括在子类中调用父类的方法和属性。接着,讨论了方法重写,明确了重写规则并举例说明。最后,探讨了抽象类和抽象方法,指出抽象类不能实例化,子类必须实现抽象方法。文章适合Java初学者阅读,有助于理解面向对象编程的核心概念。
摘要由CSDN通过智能技术生成


前言

本人对Java一种学习记录

1.1、继承是什么?

如果说类是对象的抽象化的话,那么继承就是对类进行抽象,如同生物中分类的科,这些类中有一些相似的属性和方法,我们完全可以抽象出一个父类(超类)。继承如现实世界的继承一样,那么子类要用extend 关键词,这样子类就可以继承父类的方法和属性(但要注意方法和属性的访问权限 超过权限就不行了 构造方法子类不能继承,但可以调用),提高代码的复用性。Java中只支持单继承,这样可以防止多继承中多个父类中方法名相同,确定调用那个父类中的方法的麻烦

1.2、例子

代码如下):

package com.yc;

public class Aminal {
    public String head;
    public String body;
    public void eat(){
        
    }
}

定义了一个了Aminal类

package com.yc;

public class Dog extends Aminal {
   //子类的属性和方法
    
}

2.1、super是什么?

因为子类继承了父类(在子类实例化的时候,其父类会先一步创建)方法,所以Java提供了super关键字来调用父类的方法和属性(但只能调用直接父类 同时 还能调用父类中被子类覆盖的方法和属性),在super在构造方法要放在第一行,因为父类的构造方法要比子类的构造方法前创建

2.2简单的使用

代码如下):

package com.yc;

public class Aminal {
    public String head ;
    public String body ;
    public void run(){

    }
}
class Dog extends Aminal{
    public void eat(){
        System.out.println();
        super.run();
        System.out.println(super.head);

    }

}

经过测试super的调用要在方法体类,不管是调用属性还是方法,不是构造类,用super的调用是没有限制的 super()和this.()不能同时使用(他们都不能做静态方法中)

3.1、重写是什么?

父类中的方法无法满足字类中的要求,那么我们会对这个方法进行重写,重写的方法只有两点要注意:1,重写的方法的访问修饰符的权限子类 >= 父类,private除外和因为权限原因无法继承的方法。2,方法体的不同,子类根据需求来写,同事在其他类要调用父类的这个方法依然可以通过super.方法名();来调用

3.2简单的使用

代码如下):

package com.yc;

public class Aminal {
    public String head ;
    public String body ;
    public void eat(){
    System.out.println("aa");

    }
}
class Dog extends Aminal{
    public void eat(){
        
        System.out.println("bb");

    }

}

方法的重写要与方法的重载区分开来;并且很好的解释出其中的不同,这个是初级程序员面试常考题

位置方法名参数表返回值访问修饰符
方法重写子类相同相同相同或是其子不能比父类更严格
方法重载同类相同不相同无关无关

4.1、抽象是什么?

因为一些类因为比其他类抽象一些,实例化用处不大,所以引用出抽象类(抽象类中不一定有抽象方法但抽象方法一定在抽象类中(接口是一种特殊的抽象类))
抽象类用abstract,抽象方法是没有方法体的,当一个类继承了抽象类时,我们必须实现其中的抽象方法

2.2简单的使用

代码如下):

package com.yc;

public abstract class Aminal {
    public String head ;
    public String body ;
    public  abstract void eat();
}
class Dog extends Aminal{


    @Override
    public void eat() {
        
    }
}

抽象类中可以有构造方法,但不能实例化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值