首页 > 编程 > Java > 正文

Java--继承(extends)

2019-11-08 03:14:24
字体:
来源:转载
供稿:网友
继承的好处   * a:提高了代码的复用性   * b:提高了代码的维护性   * c:让类与类之间产生了关系,是多态的前提继承的弊端   * 类的耦合性增强了。   * 开发的原则:高内聚,低耦合。   * 耦合:类与类的关系   * 内聚:就是自己完成某件事情的能力java中类的继承特点   * a:Java只支持单继承,不支持多继承。(一个儿子只能有一个爹)   * 有些语言是支持多继承,格式:extends 类1,类2,...   * b:Java支持多层继承(继承体系)案例演示   * Java中类的继承特点   * 如果想用这个体系的所有功能用最底层的类创建对象   * 如果想看这个体系的共性功能,看最顶层的类继承的注意事项   * a:子类只能继承父类所有非私有的成员(成员方法和成员变量)   * b:子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法。

   * c:不要为了部分功能而去继承

this和super都代表什么   * this:代表当前对象的引用,谁来调用我,我就代表谁   * super:代表当前对象父类的引用this和super的使用区别   * a:调用成员变量   * this.成员变量 调用本类的成员变量,也可以调用父类的成员变量   * super.成员变量 调用父类的成员变量   * b:调用构造方法   * this(...)调用本类的构造方法   * super(...)调用父类的构造方法   * c:调用成员方法   * this.成员方法 调用本类的成员方法,也可以调用父类的方法   * super.成员方法 调用父类的成员方法子类中所有的构造方法默认都会访问父类中空参数的构造方法  为什么呢?   * 因为子类会继承父类中的数据,可能还会使用父类的数据。   * 所以,子类初始化之前,一定要先完成父类数据的初始化。   * 每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。

class Extends{	public static void main(String[] args){		Son s = new Son();		s.setName("李四");		System.out.PRintln("--------------------------");		Zi z = new Zi();		/*		  1、jvm调用了main方法,main进栈		  2、遇到Zi z = new Zi();会先将Fu.class和Zi.class分别加载进内存,在创建对象,		  当Fu.class加载进内存,父类的静态代码块会随着Fu.class一起加载,当Zi.class加载		  进内存,子类的静态代码块会随着Zi.class一起加载第一个输出,静态代码块Fu,第二个		  输出静态代码块Zi		  3、走Zi类的构造方法,因为Java中分层初始化的,先初始化父类,在初始化子类,所以先走		  的父类,但是执行父类构造时,发现父类有构造代码块,构造代码块是优先于构造方法执行的,		  所以第三个输出构造代码块Fu,第四个输出构造方法Fu		  4、Fu类初始化结束,子类初始化,第五个输出构造代码块Zi,构造方法Zi		*/	}}class Father{	private String name;	private int age;	public Father(){		System.out.println("Father 空参构造方法");	}	public Father(String name,int age){		System.out.println("Fathe 有参构造方法");	}	public void setName(String name){		this.name = name;	}	public String getName(){		return name;	}	public void setAge(int age){		this.age = age;	}	public int getAge(){		return age;	}}class Son extends Father{	public Son(){		super();         //系统默认加上,用来访问父类中的空参构造		System.out.println("Son 空参构造方法");	}	public Son(String name,int age){		System.out.println("Son 有参构造方法");	}}class Fu {	static {		System.out.println("静态代码块Fu");	}		{		System.out.println("构造代码块Fu");	}		public Fu() {		System.out.println("构造方法Fu");	}}	class Zi extends Fu {	static {		System.out.println("静态代码块Zi");	}		{		System.out.println("构造代码块Zi");	}		public Zi() {		System.out.println("构造方法Zi");	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表