学习笔记(51):4天速学JAVA面向对象-引用数据类型之间的转换方式

立即学习:https://edu.csdn.net/course/play/24609/274865?utm_source=blogtoedu

package cn.itxdl.day10;

public class PersonWorkTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 声明父类类型的引用指向父类类型的对象
		Person p =new Person("zanngfei",30);
		//当子类没有重写show方法时,下面调用父类的show方法
		p.show();
		//声明子类类型的引用指向子类类型的对象
		Work w = new Work("guangyu",32,2001);
		//当子类没有重写show方法时,下面调用父类的show方法,有就调用子类的show
		w.show();
		//声明父类类型的引用指向子类类型的对象,形成多态
		Person pw = new Work("liubei",35,2100);
		//当子类没有重写show方法时,下面调用父类的show方法 有就调用子类的show
		// 1.在编译阶段调用父类中的show方法,在运行阶段调用子类中重写的show
		pw.show();
		
		System.out.println("---------------------------------------------------------------------");
		//父类的引用是否能够调用父类独有的方法以及子类独有的方法
		String str = pw.getName();
		//2.当父类的引用指向子类的对象时。父类的引用可以直接调用父类独有的方法
		System.out.println("获取到的姓名" +str);
		//3.当父类的引用指向子类的对象时。父类的引用不能掉的子类独有的方法
		//4.对于父子类都有的非静态成员方法来说,编译阶段调用父类的版本,执行的时候调用子类重写的方法
		//5.对于父子类都有静态成员方法来说,编译和运行都调用父类的版本,隶属于类层级,因此与指向的对象无关
		pw.test(); //斜体字表示是静态方法
		Person.test();//用类名 . 方法  访问  (推荐)
		
		System.out.println("---------------------------------------------------------------------");
		//6.若希望父类引用可以调用子类独有的方法,则需要强制类型转换
		int  num =((Work) pw).getSalary();//将pw 强制转换成 work
		System.out.println("薪水是"+num);

		/*1.4引用数据类型之间的转换

		1)引用数据类型之间的转换分为:自动类型转换 和 强制类型转换;

			其中自动类型的转换主要指从小范围到大范围之间的转换,也就是子类到父类的转换。

			其中强制类型转换主要指从大范围到小范围之间的转换,也就是从父类到子类的转换。
			
			引用数据类型之间的转换必须发生在父子之间,否则编译报错  */
	}

}
package cn.itxdl.day10;

public class Person {
	private String name;
	private int age;
	public Person() {
		super();
	}
	public Person(String name, int age) {
		super();
		setName(name);
		setAge(age);
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		if (age>0) {
			this.age = age;
		}else {
			System.out.println("年龄不合理");
		}
	}
	public void show() {
		System.out.println("父类");
		
		System.out.println("姓名是"+getName()+",年龄是"+getAge());
	}
	
	public static void test(){
		
		System.out.println("父类中的静态方法");
	}
    
}
package cn.itxdl.day10;

public class Work extends Person {
	private int salary;

	public Work() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Work(String name, int age , int salary) {
		super(name, age);
		setSalary(salary);
		// TODO Auto-generated constructor stub
	}

	public int getSalary() {
		return salary;
	}

	public void setSalary(int salary) {
		if (salary > 2000) {
			 this.salary=salary;
			}else {
			  System.out.println("工资不合理");	
			}
	}
	
	@Override
	public void show(){
		//super.show();
		System.out.println("薪水是"+getSalary());
	}
	
	public static void test(){
		
		System.out.println("---子类中的静态方法");
	}
	

}

1.4引用数据类型之间的转换

1)引用数据类型之间的转换分为:自动类型转换 和 强制类型转换;

其中自动类型的转换主要指从小范围到大范围之间的转换,也就是子类到父类的转换。

其中强制类型转换主要指从大范围到小范围之间的转换,也就是从父类到子类的转换。

引用数据类型之间的转换必须发生在父子之间,否则编译报错

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值