Java中的继承

61 阅读2分钟

一、继承的语法格式

java有三大特性:封装、继承、多态

继承至少有两个类,语法格式为:

class A{
	属性
	方法
}
class B extends A{
	B就可以继承A的属性和方法
}

B继承了A ,B叫A的子类 ,A叫B的父类 、超类 、基类 、祖宗类

二、一个以语法格式为准的入门案例

package com.qf.wp;

class Father3{
	//属性
	String name;
	int age;
	//行为
	public void eat() {
		System.out.println("吃窝窝头");
	}
}
class Son3 extends Father3{
	//想让Son3 去继承Father3 类
}

public class Test01 {
	public static void main(String[] args) {
		Son3 son = new Son3();
		son.name = "大头儿子";
		son.age = 7;
		
		System.out.println(son.name);//大头儿子
		System.out.println(son.age);//7
		son.eat();//吃窝窝头
	}
}

三、继承的使用规则

其实就是父类的属性和方法,子类中可以使用

1.成员变量(属性)与成员方法(方法)

公开的(public)和默认的(啥也不写)属性,子类可以使用,

私有的(private)属性,子类无法使用

2.构造方法

new Son3(); 尽管你是new的儿子类 ,但是会执行父类的构造方法

先执行父类的构造方法,然后再执行子类的构造方法

如果父类中没有无参构造方法,子类也不能有无参构造方法

举个例子:

package yanshi_01;

class Father1{
	
	public String name;//公开的属性
	int age;//默认的属性
	private int id;//私有化的属性
	
	public Father1() {//无参构造方法
		
	}
	public Father1(String name,int age,int id) {//有参构造方法
		this.name = name;
		this.age = id;
		this.id= id;
	}
	
	public void eat() {//公开的方法
		System.out.println("吃红薯面");
	}
	void work() {//默认的方法
		System.out.println("翻地球");
	}
	private void smoking() {//私有化的方法
		System.out.println("抽旱烟");
	}
}
class Son1 extends Father1{
	public Son1() {//无参构造方法
		
	}
	public Son1(String name,int age,int id) {
		super(name,age,id);//调用父类的有参构造方法
	}
}

public class Test01 {
	public static void main(String[] args) {
		Son1 son = new Son1();
		son.name = "小灰灰";//发现公开的属性 可以继承
		son.age = 4;//发现默认的属性 可以继承
		
		//son.id = 12;//The field Father1.id is not visible 不可见
		son.eat();
		son.work();
		//son.smoking();//The method smoking() from the type Father1 is not visible
	}
}

四、多重继承

Java中是单继承 (只能有一个父类) 但是可以多重继承

举个例子:

package com.qf.test;

class Father1 {
	String name1;
}
class Father2 extends Father1{
	String name2;
	
}

//Son 叫Father2  爹     Father2 叫 Father1 爹
//Son 叫Father1  爷爷   多重继承
class Son extends Father2 {
	
}

public class Demo4 {
	public static void main(String[] args) {
		
	}
}

五、关于父类和子类的内存分析

这里主要关注 栈 和 堆

使用以下代码解读

class Father {
 	String name;
 	int age;
}
class Son extnds Father {
	char sex;
}
main {
	Son son = new Son();
}

无论是父类和子类 都在堆中的 同一个内存空间中

9a6272cf949111e7100042811037292.png

完结,撒花~