各位好,很多人还不知道java是怎么理解多态性的。下面详细解释一下。现在让我们来看看!
Java多态性是一个抽象的概念。虽然感觉到了,但是一直解释不清楚。无意中发现了一段更容易理解多态性的代码,可以体现多态性的优势。下面就录下来分享到这里总结一下。
多态,这个面向对象中最重要的概念,在Java中得到了体现:父类的引用指向子类的对象。
多态性是同一行为具有多种不同表现或形式的能力。
方法调用:向左编译,向右运行。
变量调用:编译时向左看,运行时向左看。(多态性侧重于行为多态性)
存在继承/实现关系
方法覆盖
有指向子类对象的父类引用。
在多态形式中,正确的对象可以实现组件切换,
//定义一个动物类
动物类{
//动物有办法跑
公共无效运行(){
System.out.println("动物能跑");
}
}
//定义动物的子类,猫
类别猫扩展动物{
@覆盖
公共无效运行(){
System.out.println("猫能跑");
}
//编写一个特定于Cat的方法
publicvoideatFish(){
System.out.println("猫在吃鱼");
}
}
//编写一个测试类
公共类测试{
公共静态voidmain(String[]args){
//我们创建一个Cat对象并执行它的run方法肯定是没有问题的。
CatCat=newCat();
cat.run();
//多态形式我们可以用一个动物变量来接受一个猫对象。
animalanimalCat=newCat();
animalcat.run();
}
}
可以看出,虽然我们用Animal接受了一个Cat类,但是在调用run方法时,执行的是Cat重写的run方法,而不是Animal的run方法。
易于扩展和维护。可以实现类之间的解耦。
子类的唯一函数不能在多态下使用。
下面是一个简单易懂的应用场景。
需求:
创建三个类:人、学生和老师。Person是父类,实现Comparable接口并覆盖pareTo方法。学生和教师是人的子类。
创建一个测试类,并编写一个静态方法来比较测试类中的年龄。
写一个Person类,实现可比重写pareTo方法。
公共类人实现可比{
私有字符串用户名;
私人年龄;
公共字符串getUsername(){
返回用户名;
}
publicvoidsetUsername(字符串用户名){
this.username=用户名;
}
publicintgetAge(){
回归年龄;
}
公共无效存储(整数){
this.age=年龄;
}
@覆盖
公共字符串toString(){
返回"学生{"+
"用户名='"+用户名+'''+
“,年龄="+年龄+
'}';
}
@覆盖
publicintpareTo(Persono){
返回this.age-o.age;
}
}
编写一个学生类来继承Person类。
公共课学生拓展人{
}
写一个老师类来继承Person类。
公共课教师扩展人{
}
编写一个测试类,并在测试类中编写一个静态年龄比较方法。
公共类测试{
公共静态voidmain(String[]args){
//创建一个学生对象
学生学生=新生();
Student.setUsername("小明");
student.setage(20);
//创建教师对象
老师老师=新老师();
Teacher.setUsername("刘老师");
teacher.setage(35);
可比maxAge=getMaxAge(学生,老师);
system.out.println(maxAge);
}
//创建一个静态方法来比较年龄
//传入两个可比较的实现类对象。
//返回一个类似的实现类对象
公共静态可比getMaxAge(可比a,可比b){
intresult=a.Pareto(b);
//如果result0,c1大于C2;
//如果result==0,c1和c2一样大;
如果(结果>=0){
返回a;
}否则{
返回b;
}
}
}
执行结果
这种年龄比较方法使用多态形式。我们可以通过学生班主任课。只要被比较的两个类属于同一个父类,我们就可以直接调用这个静态方法进行比较。
以上解释了java对多态性的理解。这篇文章已经分享到这里了,希望能帮到你。
下一篇:带贝的都与什么有关