一、继承的语法格式
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();
}
无论是父类和子类 都在堆中的 同一个内存空间中