Java继承之接口和抽象类的区别和重载详解

本文探讨了Java继承中抽象类与接口的区别,包括静态代码执行顺序,并详细阐述了方法重载的概念。子类虽不会覆盖父类同名变量和方法,但在调用时会优先使用子类的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java继承

  • private 的变量和方法不能被子类直接调用,但是子类可以用setter和getter对private变量进行操作
  • protect 的变量和方法可以被子类直接调用,但是不可以被非子类调用
  • public 则没有限制

抽象类和接口的区别

抽象类和接口一样不能被实例化,但是尤其如下区别:

接口(interface)抽象类(abstract class)
变量接口中的变量默认是且只能是public static final(即常量,必须赋初值)对定义的变量没有限制
方法只有抽象方法(public abstract修饰),java 1.8中可以定义default方法体抽象类可以有定义与实现方法
使用implements,一个类可实现多个接口extends,一个类仅能继承一个类,abstract class除了不能实例化和可以写抽象方法外,和class没有区别,甚至可以继承自class
意义接口代表功能或能力(如:Runnable、Serializable),琴棋书画可以设计为四个接口抽象类用来提取重复代码,让代码写且只写一次

静态代码的执行顺序

参考我的博文

重载详解

事实上子类的变量和方法并不会覆盖父类的同名变量和方法,但调用的时候会优先调用子类的变量。
例子如下:

public class MyA {
	private int sameField;

	public int getSameField() {
		return sameField;
	}

	public void setSameField(int sameField) {
		this.sameField = sameField;
	}

	@Override
	public String toString() {
		return "MyA [sameField=" + sameField + "]";
	}
}
public class MyB extends MyA{
	private int sameField;

	public int getSameField() {
		return sameField;
	}

	public void setSameField(int sameField) {
		this.sameField = sameField;
		super.setSameField(sameField-1);
	}
	
	
	
	@Override
	public String toString() {
		return super.toString()+"MyB [sameField=" + sameField + "]";
	}

	public static void main(String[] args) {
		MyA b = new MyB();
		b.setSameField(10);
		System.out.println(b);
	}
}

运行结果:
在这里插入图片描述
想要了解更多细节可以自行Debug单步调试观察变量的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值