java中继承由extends关键字实现
java中只有单继承
继承关系是由“子类和父类”确定
父子关系是相对的
特点:子类可以拥有父类的属性和方法
当两个类有相同的属性方法,抽取父类
减少代码关系,实现代码复用
子类可以拥有自己新的属性和方法
三个Java文件在同一个包中
第一个例子
Father.java
package com.lyc;
public class Father{
String name;
public void diver(){
System.out.println("骑自行车");
}
}
Son.java
package com.lyc;
public class Son extends Father {
}
Test.java
package com.lyc;
public class Test {
public static void main(String[] args) {
//子类可以拥有父类的属性和方法
//父类私有的,子类无法访问
//父类方法是默认的,子类与其不在一个包中无法访问
Son sanmao = new Son();
sanmao.name ="三毛";
sanmao.diver();
System.out.println(sanmao.name);
}
}
第二个例子
Teacher.java
package com.lyc1;
public class Teacher {
public String name;
public int age;
public int workage;
}
Student.java
package com.lyc1;
public class Student extends Teacher{
public String stuid; //学号
}
Test.java
package com.lyc1;
public class Test {
public static void main(String[] args) {
Teacher t = new Teacher();
t.age = 20;
t.name ="zhangsan";
t.workage = 0;
Student s = new Student();
s.age =10;
s.name = "xuesheng";
s.stuid ="1111";
}
}
java继承中的构造方法
三个java文件在同一个包中
Father1.java
package com.lyc3;
public class Father1 {
String name;
public Father1(String name){
name = this.name;
}
//上面代码若存在且注释下面两行代码,Test1则会报错,因为子类只能调用父类已有的构造方法
public Father1(){
System.out.println("显式无参");
}
}
Son2.java
package com.lyc3;
public class Son2 extends Father1{
//加上以下几行代码,Test1就会调用父类的显式构造方法
public Son2(){
super("zhangsan");
System.out.println("子类显式无参构造方法");
}
}
Test1.java
package com.lyc3;
public class Test1 {
//构造方法的基础
//1.类中一定存在构造方法(显式或隐式)
//2.如果有显式构造方法,就不会有隐式构造方法
//继承中的构造方法
//1.创建子类对象一定会调用父类的构造方法(显式或隐式)
//2.子类默认调用父类无参构造方法
//3.子类只能调用父类存在的构造方法
public static void main(String[] args) {
Son2 sanmao = new Son2();
}
}