java 四大特征(3)
来源:互联网 发布:中世纪骑兵知乎 编辑:程序博客网 时间:2024/06/14 13:54
特征四----多态
方法重载(overload)
问题提出:编写一个类,可以接受两个证书,返回两个数种较大的数?
如果要求可以接受两个float型的书,返回较大数
如果要求接受三个int型的数,返回最大数
package com.panhui;
publicclassdemo9_20_1 {
publicstatic void main(String[]args) {
// TODO Auto-generated method stub
ABCa=newABC();
System.out.println(ABC.getMax(2,3));
}
}
class ABC
{
//返回较大的整数
//注意:方法要设置成静态的,这样才能被共用。
publicstatic int getMax(inti,intj)
{
if(i >j)
{
returni;
}
else
{
returnj;
}
}
//返回浮点型
publicstatic float getMax(floata,floatb)
{
if(a>b)
{
returna;
}
else
{
returnb;
}
}
}
结果
如果调用的时候写成getMax(12,4.5f);那么调用的方法是下面一个。因为会自动有低精度想高精度转。
概念
就是类的同一种功能的多种实现方式,到底采用哪种方式,取决于调用者给出的参数。
注意事项
1, 方法名是相同的
2, 方法的参数类型,个数,顺序至少有一项是不同的。
如果一个方法:publicstatic float getMax(float a,float b)
另一个方法:publicstatic float getMax(float c,float d)
那么编译器会报错,不复回上面的要求。
3, 方法返回类型可以不同
如果只是返回的类型不一样,是不可以构成重载。
4, 方法的修饰符可以不同
如果只是控制访问符不一样的话,也是不可以构成重载。
方法覆盖(overwrite)
既然子类可以继承父类的属性和方法,这样可以提高的代码的复用性。
那么,如果有三个类,猫,狗,猪,父类是动物,然后继承
问题:怎么解决子类和父类方法的异同。
理解:方法覆盖就是,子类重新写一个方法,不用父类的方法,类名可以和父类的方法相同,(细节不深究)。
如下代码:
package com.panhui;
publicclassdemo9_20_2 {
publicstatic void main(String[]args) {
// TODO Auto-generated method stub
//创建一只猫
Catcat1=newCat();
cat1.cry();
//创建一只狗
Dogdog1=newDog();
dog1.cry();
}
}
//动物类
class Animal
{
intage;
String name;
//都会叫,
publicvoidcry()
{
System.out.println("我是动物,不知道怎么叫唤!");
}
}
// 猫类
class Cat
{
//覆盖父类
publicvoid cry()
{
System.out.println("猫猫叫");
}
}
//狗类
class Dog
{
publicvoid cry()
{
System.out.println("狗狗叫");
}
}
结果:
注意事项:
1, 子类的方法的返回类型,参数,方法名称,要和父类方法的返回类型,参数,方法名称完全一样,否则编译出错
2, 子类方法不能缩小父类方法的访问权限
正题:多态
理解:指向通过指向父类的指针,来调用在不同子类中实现的方法。
主人喂食,调用不同类中的方法体现出,喂的哪个动物,喂的是什么食物。
package com.panhui;
publicclassdemo9_20_3 {
publicstatic void main(String[]args) {
// TODO Auto-generated method stub
/*
Catcat = new Cat();
cat.cry();
Dogdog = new Dog();
dog.cry();
//多态的体现。取决于等号的右边。
Animalan = new Cat();
an.cry();
an= new Dog();
an.cry();*/
Mastermaster=newMaster();
master.feed(new Dog(),new Bone());
master.feed(new Cat(),newFish());
}
}
class Master
{
//给动物喂食,使用多态,方法就可以用一个就行了
publicvoid feed(Animal an,Food f)
{
an.eat();
f.showname();
}
}
class Food
{
Stringname;
publicvoid showname()
{
}
}
classFish extends Food
{
publicvoid showname()
{
System.out.println("鱼");
}
}
class Boneextends Food
{
publicvoid showname()
{
System.out.println("骨头");
}
}
//动物类Animal
class Animal
{
privateint age;
private Stringname;
publicString getName() {
returnname;
}
publicvoid eat() {
// TODO Auto-generated method stub
}
publicvoid setName(String name) {
this.name =name;
}
publicint getAge()
{
returnage;
}
publicvoid setAge(intage) {
this.age =age;
}
//动物会叫
publicvoid cry()
{
System.out.print("不知道怎么叫!");
}
}
//
class CatextendsAnimal
{
//猫自己叫
publicvoid cry()
{
System.out.print("猫猫叫!");
}
publicvoid eat()
{
System.out.print("猫吃鱼!");
}
}
class DogextendsAnimal
{
//猫自己叫
publicvoid cry()
{
System.out.print("狗狗叫!");
}
publicvoid eat()
{
System.out.print("狗吃骨头!");
}
}
结果
多态的注意事项
java 允许父类的引用变量引用它的子类的实例
Animal animal =new Cat();
- java 四大特征(3)
- java--四大特征(1)
- java四大特征(2)
- java的四大特征
- java面向对象四大特征
- Java四大特征(抽象、封装、继承、多态)
- java面向对象四大特征(上)
- java面向对象四大特征(下)
- Java 面向对象的四大特征
- java的面向对象的四大特征
- Java基础(四)——面向对象的四大特征
- 事务的四大特征
- 面向对象四大特征
- 事务四大特征
- 对象的四大特征(上)--封装和继承
- 对象的四大特征(下)--抽象和多态
- 健康男人有四大特征
- 大数据的四大特征
- (四)2进程调度的相关概念
- LaTeX(使用TexStudio)创建参考文献的方法
- 使用Fragment实现底部菜单栏功能,并实现左右滑动切换
- js onclick方法 传递json对象报错
- 判断tcp 是否正常连接
- java 四大特征(3)
- (四)3抢占和上下文切换
- Fedora系统安装MySQL后死活无法启动的问题
- 263. Ugly Number
- 《JavaScript高级程序设计》总结二
- [LeetCode]Reverse Integer
- Windows 各种计时函数总结
- Reactor模式,两种高效的并发模式
- 第三周项目2-建设“顺序表”算法库