Java08/多态/向上转型/final/instanceof/权限修饰符

四 多态

extends继承或implements实现,是多态性的前提

1多态性的表现

(父类引用可以指向多个子类对象)

父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
  • 访问成员变量
    编译和运行都看左边
public class Demo{
	public static void main(String[] args){
		Fu obj = new Zi();
		//父类中有num
		System.out.println(obj.num);//10
		//父类中没有age
		System.out.println(obj.age);//报错
	}
}
  • 访问成员方法
    编译看左,运行看右
public class Demo1{
   public static void main(String[] args){
   	Fu obj = new Zi();
   	//父类子类都有method优先用子类的
   	obj.method();
   	//父类中有,子类没有,向上查找
   	obj.methodFu();
   	//编译时报错,左边为父类的类型
   	obj.methodZi();
   }
}
2 向上转型

对象的向上转型,即为多态的写法

public class Demo{
	public static void main(String[] args){
	//对象向上转型即为,父类引用指向子类对象
		Fu obj = new Zi();
	}

向上转型的时机:

  • 直接赋值
  • 方法传参
  • 方法返回

注意:
在Java 中, 调用某个类的方法, 究竟执行了哪段代码(是父类方法的代码还是子类方法的代码) , 要看究竟这个引用指向的是父类对象还是子类对象. 这个过程是程序运行时决定的(而不是编译期), 因此称为动态绑定

3 向下转型
子类名称 对象名 = (子类名称)父类对象;

将父类对象,还原为本来的子类对象。

//本来是猫,向上转型为动物
Animal animal  = new Cat();
//还原为本来的猫,即向下转型
Cat cat = (Cat) animal;

向下转型,必须保证创建出的和还原回去的相同。

4 instanceof

判断当前对象是否为后面类型的实例

if(animal instanceof Cat){
	//如果为猫,则可发生向下转型
	Cat cat = (Cat) animal;
}
5 Final 关键字
  • 修饰类、方法、局部变量、成员变量

  • 当用final关键字修饰一个类时,该类不能有任何子类。

public final class 类名称{
}
  • 当修饰方法时,该方法不能被重写
public final 返回值类型 方法名称(参数列表){
   //...
}
  • final修饰成员变量时,由于成员变量有默认值,所以必须对其进行手动赋值。
//正确的,只需保证有唯一一次赋值即可
final int num3;
num3 = 19;

对于final修饰的成员变量,要么直接赋值,要么使用构造方法进行赋值,必须保证所有重载的构造方法都会对其进行赋值

  • 对于基本类型来说,不可变说的是变量中的数据不可改变
  • 对于引用类型来说,说的是变量的地址值不改变,也就是说其内容可以改变
final Student stu2 = new Student("a");
//错误,地址值不可改变
 stu2 = new Student("b");
6 权限修饰符

不同包中的类需要导入一下

public protected (default) private
同一个类 yes yes yes yes
同一个包 yes yes yes
不同包子类 yes yes
不同包非子类 yes

注意:default此处代表留空

发布了54 篇原创文章 · 获赞 6 · 访问量 4828

猜你喜欢

转载自blog.csdn.net/glpghz/article/details/103206488