继承基础 重写的规范 与 instanceOf运算符的使用

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("看门");
	}
}

下面我们来验证第二条要求:访问权限,子类大于等于父类
在这里插入图片描述

下面我们来验证第三条要求:返回值类型和声明异常类型,子类必须小于等于父类。

注意 此时父类也必须拥有相应的存在 拥有返回值的方法
在这里插入图片描述

在这里插入图片描述

此时子类返回值类型大于父类的返回值类型,编译器报错
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值