2021-09-23继承与转型

继承

关键字:extends
	例如:父类:学生
		  子类:大学生、中学生、小学生
格式:
	public class 子类名 extends 父类名{
	
	}

继承范围

子类可以从父类中继承父类的属性、方法。
	但不同情况下可调用的属性收到了访问权限的限制。
	访问权限修饰符:
		public:在该项目中可调用
		private:仅可在该类中使用
		protected:可在同包下、不同包下的子类中使用
		缺省的:仅可在同包下使用

继承关系存在前提

子类中可以写与父类方法一致的方法
一般情况下,要求子类中除方法体(方法的具体内容)之外的一切与父类一致
子类以及子类对象会优先调用重写之后的方法
(继承父类,然后扩展父类方法的功能)
	例如:
		父类:动物吃食物
		子类:老虎吃食物
		子类:牛吃草
*********************************************ps:检查重写是否正确:
************************************************注解:@Override   //重写检查

转型

对象:学生、男性、爱吃
对象名:同一时刻编译只能具备一种类型
//自动转型,子类对象可以自动转型为父类类型
**A a = new B;//B必须是A的子类**

自动转型与强制转型

向上转型:自动转型
		 安全,自动转型之后的变量不能调用子类独有的方法属性
向下转型:强制转型
		 不安全,(ps注意哪里来的才能强制转型回哪里)
		 		 对象原本的实际类型是什么,不能只看对象名属性的类型
		 		 int i = (int)1.2      --->i=1    0.2被吃了
例如:
	 父类:A
	 子类:B、C
	 B--》A向上转型、自动转型后A--》B属于强制转型,但他属于从哪来回哪去
	 B--》A后A--》C是错误的,会显示类型转型异常
*****如何保证安全的强制转型?*****
	 先比较对象是否是这一类型,在想着一类型转型。
	 关键字:instanceof
if(anobject instanceof String){
	String anotherString = (String)anobject;
}

测试用代码

/*父类*/
package com.zyd0922;
import org.w3c.dom.ls.LSOutput;
import java.sql.SQLOutput;
public class Student {
    public String name;
    private int id;
    protected String adr;
    int age;
    public void study() {
        System.out.println("父类的学习方法!!");
    }
}
/* 同包下子类*/
package com.zyd0922;
import javax.print.attribute.standard.PrinterInfo;
public class UNstudent extends Student {
    public void printInfo(){
        System.out.println("name:"+name);
        //System.out.println("id"+id);
        System.out.println("adr"+adr);
        System.out.println("age"+age);
    }
    public void study(){
        System.out.println("这是子类的学习方法UNstudent");
    }
}
```java
package com.zyd0922;
/*与父类子类同包下的非子类
* 与不同包子类下的不同包非子类*/
public class youngerStudent {
    public static void main(String[] args) {
        UNstudent unstu1 = new UNstudent();
        unstu1.name = "";
        unstu1.adr = "";
        unstu1.age = 1;
        //unstu1.id = "";
        unstu1.printInfo();
        unstu1.study();
        Student stu = new Student();
        stu.study();
    }
}
/* 不同包下子类 */
package com.zyd0923;
import com.zyd0922.Student;
public class MidStudent extends Student {
    public void printInfo(){
        System.out.println("name:"+name);
        //System.out.println("id"+id);
        System.out.println("adr"+adr);
        //System.out.println("age"+age);
    }
    public void study() {
        System.out.println("非同包子类的学习方法!!");
    }
}
/*与父类子类不同包下的非子类*/
package com.zyd0923;
import com.zyd0922.Student;
import com.zyd0922.UNstudent;
public class Teacher {
    public static void main(String[] args) {
        Student teacher = new Student();
        System.out.println("name:"+teacher.name);
        UNstudent unstu = new UNstudent();
        System.out.println("name:"+unstu.name);
        //System.out.println("name:"+teacher.name);
        //System.out.println("id"+id);
        //System.out.println("adr"+adr);
        //System.out.println("age"+age);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值