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

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单步调试观察变量的值

发布了41 篇原创文章 · 获赞 27 · 访问量 5840

猜你喜欢

转载自blog.csdn.net/weixin_43217564/article/details/103124590
今日推荐