Java只有单继承 没有多继承
Java中类没有多继承 接口有多继承
继承要点:
1.子类继承父类 可以得到父类全部的属性和方法(除了父类的构造方法),但不见得可以直接访问(比如父类的私有属性和私有方法)
2.如果类没有调用extends 则他的父类是java.lang.Object
代码实例
public class Test {
public static void main(String[] args) {
Student stu = new Student(1001, "张三", "软件技术");
stu.rest(); //结果:休息一会... 子类可以调用父类中的方法。除了私有方法
stu.name="我现在改名了";//子类可以调用父类中的属性。除了私有属性
Person p = new Person();
System.out.println(p.name);
// 结果:null ,说明在子类中对父类的属性进行修改,父类本身的属于不变,修改只对子类修改
System.out.println(stu.name); // 结果: 我现在改名了
}
}
class Person{
int num;
String name;
public void rest() {
System.out.println("休息一会...");
}
}
class Student extends Person{
String major;
public Student(int num,String name,String major) {
super();
this.major=major;
this.name=name; //子类拥有了父类的非私有属性
this.num=num;
}
public void study() {
System.out.println("敲代码学习了");
}
}
二.instanceof运算符
左面是不是属于右边类型
public class Test {
public static void main(String[] args) {
Student stu = new Student(1001, "张三", "软件技术");
Student stu2 = new Student();
Person p = new Person();
System.out.println(stu instanceof Person); //true
System.out.println(stu2 instanceof Student); //true
System.out.println(p instanceof Student);//false
System.out.println(stu instanceof Object);//true
}
}
class Person{
int num;
String name;
}
class Student extends Person{
String major;
public Student() {
}
public Student(int num,String name,String major) {
super();
this.major=major;
this.name=name;
this.num=num;
}
}
三.重写的规范
重写:(重写可以理解为覆盖)子类重写父类的方法 用自身的行为替换父类的行为
首先,先说明重写的规范:
1.方法名,形参列表必须相同
2.返回值类型和声明异常类型,子类必须小于等于父类
3.访问权限,子类大于等于父类
首先,先举出一个没有进行方法重写的例子,此时子类Dog继承父类Animal的方法。无论调用子类对象的act方法,还是父类对象的act方法,其结果都是输出的父类方法的内容。
public class TestOverride {
public static void main(String[] args) {
Animal an = new Animal();
Dog dog = new Dog();
an.act();//行动..
dog.act();//行动..
}
}
class Animal{
public void act() {
System.out.println("行动..");
}
}
class Dog extends Animal{ //Dog类继承父类
}
现在我们对子类的方法进行重写:
此时,父类的对象调用act方法执行父类的方法,而子类对象调用act方法调用的就是为子类重写后的方法,记住重写的要求之一:重写了父类的方法,方法名,形参列表必须相同
public class TestOverride {
public static void main(String[] args) {
Animal an = new Animal();
Dog dog = new Dog();
an.act();//行动..
dog.act();//看门
}
}
class Animal{
public void act() {
System.out.println("行动..");
}
}
class Dog extends Animal{ //Dog类继承父类
@Override
public void act() { //重写了父类的方法,方法名,形参列表必须相同
System.out.println("看门");
}
}
下面我们来验证第二条要求:访问权限,子类大于等于父类
下面我们来验证第三条要求:返回值类型和声明异常类型,子类必须小于等于父类。
注意 此时父类也必须拥有相应的存在 拥有返回值的方法
此时子类返回值类型大于父类的返回值类型,编译器报错