java 多态个人笔记

1、格式
  • 父类名 对象名 = new 子类名();(父父new子)
  • 接口名 对象名 = new 实现类名();
2、访问方法(1)

方式以右边为标准,找不到再找上级的

//父类
public class person {

	public void test() {
		System.out.println("父");
	}

}

//子类
public class student extends person {

	@Override
	public void test() {
		System.out.println("子");

	}

}

public class demo1 {

	public static void main(String[] args) {
		person obj = new student();
		obj.test();

	}

}
3、访问变量
  • 直接通过对象名称访问变量,优先左边,没有再向上找
  • 间接通过函数访问变量,优先右边,看函数属于谁,没有再向上找
//父类
public class person {

	int num = 10;

	public void test() {
		System.out.println(num);
	}
}

//子类
public class student extends person {

	int num = 20;
	int sum = 30;

	@Override
	public void test() {
		System.out.println(num);
	}
}

public class demo1 {

	public static void main(String[] args) {
		person obj = new student();
		System.out.println(obj.num);// 直接调用,看左边

		obj.test();// 间接调用,看右边,看方法属于谁,没用再往上级
		// System.out.println(obj.sum); //错误,直接调用看左边,是父类。没有num只能往上找,不能往下找
	}

}
4、访问方法(2)

编译看左边,运行看右边

//父类
public class person {

	public void test() {
		System.out.println("父");
	}

	public void testFu() {
		System.out.println("父类特有方法");
	}
}

//子类
public class student extends person {

	@Override
	public void test() {
		System.out.println("子");

	}
	
	public void testZi() {
		System.out.println("子类特有方法");
	}
}

public class demo1 {

	public static void main(String[] args) {
		person obj = new student();
		obj.test();
		obj.testFu();
		// obj.testZi(); //错误,编译看左边,父类没有testZi()这个方法
		//因为类型为person,person类型没有testZi()这个方法
	}

}

5、对象向下转型

关于向上转型的,上面那些都是向上转型的,就是new 的是sutdent类,但得到的确实person类,这是向上转型
向下转型,有点类似于强制转换,在上一个例子中,person obj = new student();我们得到的是一个person对象,但是某些情况我们要用到student中的方法时,就必须向下转型才能使用

//父类
public class person {

	public void testFu() {
		System.out.println("父类特有方法");
	}
}
//子类
public class student extends person {

	public void testZi() {
		System.out.println("子类特有方法");
	}
}

public class demo1 {

	public static void main(String[] args) {
		person obj = new student();
		obj.testFu(); // 成功,因为父类有testFu()方法
		// obj.testZi(); // 失败,因为person类没有testZi()方法
		student son = (student) obj;
		son.testZi();// 成功,因为强制转换成子类了

	}

}
父类特有方法
子类特有方法

6、多态存在的意义

为什么要这么麻烦有个多态出现?
比如有个Person类,其有两个子类:StudentTeacher,两个子类的方法都是有word();函数,那么可以简单地来Person p1 = new Student; p1.work()Person p2 = new Teacher; p2.work(),如果以后还有子类的话,就可以还继续这样用,简单方便

7、instanceof

boolean instanceof 判断前面的对象是否能当作后面类型的实例

Person p1=new Student();
p1 instanceof Studeng;//true
p1 instanceof Teacher;//false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值