java多态

OPP的三个高级特性:

1.封装;

2.继承:子类继承父类;

3.多态;

一、多态(polymorphism):子类的对象可以替代父类的对象使用;

原理:同一类事物,可以拥有多种不同的形态;

代码理解:父类的引用可以指向子类的对象;

例:

1.Person  p  =  new  Person();主类

Student s = new Student();子类

Person p = s;

Teacher t = new Teacher();子类

Programmer coder = new Programmer();子类

p = t;

p = coder;

2.Animal a = new Cat();主类

a = new Dog();子类

二、特点:

1.只要是主类的子类,都可以把子类的对象赋值给父类的对象(父类的引用(或父类类型的变量)可以指向子类的对象;),即多态性;

2.一个变量只有一种数据类型

3.一个引用类型变量可能指向(或引用)多种不同类型的对象;

4.一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能访问子类中添加的属性和方法;

三、理解多态

父类的引用可以指向子类的对象;

多态的好处:提高扩展性;

缺点:多态中不能直接调用子类新添的属性和方法;

例:

Person p;无论给p赋值的类型是什么(Teacher,Programmer,Worker,Student),都只能使用Person中定义的方法和属性;

四、虚方法:

1.虚方法指的就是子类重写的方法;

2.虚方法优先级大于父类原方法;

五、两种类型

1.编译时类型:定义变量时使用的类型;

2.运行时类型:执行代码时给变量赋值时使用的类型;

例:

Person p = new Student();

编译类型:Person;

运行类型:Student;

六、强制转型

向下转型:

在继承关系下,类是有层次的,上面的是父类,下面的是子类;

如果将学生类型转成大学生类型需要向下转换,即强制转换,强制转换可能会产生转换异常;

用例及解释:

//用多态调用Student中的方法:向下转换(强制转换)
        Person per = new Student("无敌");//可以存储更丰富的类型,Person,Teacher,Student;
        Student stu  = (Student) per ;// 并非把P转成studnet类型了,其实p本来就是student,但是可以调用student类新添的方法;
        //Account acc = (Account) per;//不可转换,不能将编译类型转换成与运行类型不一致的类型;
if(per instanceof Student){//判断p是否可以向下转换为学生类型;
    System.out.println("是");
    ((Student)per).study();
}

七、向上转型

向上转型:在Java中,向上转型(upcasting)是指将子类的对象引用赋值给父类的对象引用变量。这样做是安全的,因为子类对象可以被视为父类对象。通过向上转型,可以访问父类中的公有和受保护的成员变量和方法,但不能访问子类特有的私有成员。

下面是一个简单的示例,演示了如何进行向上转型:                                                                            class Animal {  
    public void makeSound() {  
        System.out.println("The animal makes a sound");  
    }  
}  
  
class Dog extends Animal {  
    public void makeSound() {  
        System.out.println("The dog barks");  
    }  
}  
  
public class UpcastingExample {  
    public static void main(String[] args) {  
        Dog myDog = new Dog(); // 创建Dog对象  
        Animal myAnimal = (Animal) myDog; // 向上转型为Animal类型  
        myAnimal.makeSound(); // 调用Animal的makeSound方法  
    }  
}                                         

八、instanceof运算符

1.作用:判断某个对象是否是某个类的实例;

2.语法:

if(p instanceof Student){

}//p是否是Student类型的实例

如果类型转换失败,将会产生一个ClassCastException异常;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值