Java中类与接口的继承方法

        在Java这一面向对象语言的使用过程中,为了更快捷方便地开发项目功能,继承已有的类与接口进行调用是非常必要的。

继承

在Java中,类与接口都可以进行继承。

1.类之间的继承

类的继承基本逻辑为子类继承父类、普通类继承抽象类。

(1)对象成员

子类继承了父类的所有属性与方法。对于构造方法和构造代码块,子类在创建对象时也会调用父类的构造方法与代码。

(2)静态资源

子类以及父类名都可以调用同一份静态属性,且共用静态方法。

例如:创建一个学生类Student:

public class Student {
    String name;
    int number;
    int grades;
    public void Getinfo(){
        System.out.println("姓名:"+name+" 学号:"+number+" 成绩:"+grades);
    }

}

再创建一个大学生类UNStudent,去继承它:

public class UNStudent extends Student {

    String college;
    public void Exinfo(){
        System.out.println("学院:"+college);
    }
}

此时,由UNStudent类定义的变量可以同时调用Getinfo和Exinfo两个方法。

(3)访问权限修饰符:
访问权限修饰符只限制代码的调用方法,不限制是否继承。如果想要调用,可以使用公共的方法。

2.接口之间的继承

接口之间进行继承时,子接口不需要重写父接口的方法,而是继承父接口的所有抽象方法。

3.类实现接口

实现接口时,类可以共用接口的静态资源,必须重写接口中所有的抽象方法。

以Java中的接口MouseListener进行举例:

public class DrawListener implements MouseListener {
    
    public void mouseClicked(MouseEvent e) {
        System.out.println("点击");
        
    @Override
    public void mousePressed(MouseEvent e) {
        System.out.println("按下");
        x1 = e.getX();
        y1 = e.getY();
        System.out.println("x1: " + x1 + " y1:" + y1);
    }
    @Override
    public void mouseReleased(MouseEvent e) {
        System.out.println("释放");
        x2 = e.getX();
        y2 = e.getY();
        System.out.println("x2: " + x2 + " y2:" + y2);
        }
    }
    @Override
    public void mouseEntered(MouseEvent e) {
        System.out.println("进入");
    }
    @Override
    public void mouseExited(MouseEvent e) {
        System.out.println("离开");
    }
}

由于我们定义的类想要实现接口MouseListener,因此必须将接口中的这五个抽象方法进行重写。

(1)重写方法

在子类重写方法时,方法结构必须与父类一致,但方法体可以修改。即:

访问权限修饰符 返回值类型 方法名(参数列表){
    方法体;
}

其中,权限修饰符可以扩大范围,返回值类型可以缩小范围(例如int->byte)。方法名与参数列表必须一致,方法体可以修改。

(2)调用特点
子类重写方法之后,子类中以及子类对象优先调用重写的方法。
例如:还是使用上面的两个类,但是改变子类中的方法名,使其与父类一致:
​
public class Student {
    String name="张三";
    int number=20000101;
    int grades=88;
    public void Getinfo(){
        System.out.println("姓名:"+name+" 学号:"+number+" 成绩:"+grades);
    }

}
​
public class UNStudent extends Student {

    String college="软件学院";
    public void Getinfo(){
        System.out.println("学院:"+college);
    }
}

​

对其进行测试:

public class Test {
	public static void main(String[] args) {
		Student s = new Student();
		s.Getinfo();
		System.out.println("--------");
		UNStudent us = new UNStudent();
		us.Getinfo();
	}
}

结果为:

姓名:张三 学号:20000101 成绩:88
--------
学院:软件学院
子类重写方法之后,若依然要求调用父类的方法,则可使用关键字 super进行调用。
(3)注意事项

私有方法不能被重写(父类私有成员子类是不能继承的)

子类方法访问权限不能更低(public>默认>私有)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值