关于java 继承和简单多态
2016-03-21 15:08
671 查看
关于多态,在父类和子类中,涉及到父类被赋值为子类从而调用子类继承到父类的方法来访问子类的属性(覆盖的方法)
这里涉及到一般声明引用和创建对象的方法。
Dog mydog=new Dog();
1)声明对象 Dog mydog;
2)创建对象 new Dog();
3)连接对象和引用 =
最后即形成了 Dog mydog=new Dog();
在一般情况下,引用类型与对象的类型必修相符。在这里无论是创建的还是声明的对象都是Dog。
但是在多态下,引用和对象可以不相同
Animal myDog=new Dog(); ————引用类型为Animal 但是创建对象为Dog.
运用对象时,引用类型可以是实际对象的父类。
Animal myCat=new Cat();
Animal mysnail=new Snail();
…….
(Cat和Snail都是Animal 的子类)
mycat.getname();—————————输出为I am cat
mysnail.getname();————————-输出为I am snail
子类在覆盖父类方法是不能改变函数的权限或者说不能改小函数的权限,但是,可以放大权限,这是继承和覆盖的基本规则。
覆盖:方法名称相同,返回类型相同,参数相同,我们只是修改函数的内容。
重载:方法名相同,但是放回类型和参数不相同,参数不相同是指参数类型或者说是参数数目不同,但是只改变返回类型是被允许的,但是权限可以随便的改变。在另一种程度来说,我们是创建了一个新的函数,只是函数名称相同,但是我们只是为了相同的函数名实现在不同的情况下的目标功能而已。
这里涉及到一般声明引用和创建对象的方法。
Dog mydog=new Dog();
1)声明对象 Dog mydog;
2)创建对象 new Dog();
3)连接对象和引用 =
最后即形成了 Dog mydog=new Dog();
在一般情况下,引用类型与对象的类型必修相符。在这里无论是创建的还是声明的对象都是Dog。
但是在多态下,引用和对象可以不相同
Animal myDog=new Dog(); ————引用类型为Animal 但是创建对象为Dog.
运用对象时,引用类型可以是实际对象的父类。
Animal myCat=new Cat();
Animal mysnail=new Snail();
…….
(Cat和Snail都是Animal 的子类)
mycat.getname();—————————输出为I am cat
mysnail.getname();————————-输出为I am snail
package shanghai; class A{ private int a; void introduce() { System.out.println("i am class A"); } void SetA(int a) { this.a=a; } int GetA() { return this.a; } } class B extends A{ void introduce() { System.out.println("I am class B"); } } class C extends B{ void introduce() { System.out.println("i am class C"); } } class Speaker { public void introduce(A a) //将类a为参数带进去,这里是多态中参数的使用。 { a.introduce(); } void state() { } int getId() { return 2; } public A Re_class()//返回类型多态 { C c=new C(); return c; } } public class Example { public static void main(String[] args) { A a=new B(); a.introduce();//运行结果是I am class B,这里是父类对子类的函数调用,显示的是子类的函数运行结果。 Speaker s=new Speaker(); C c=new C(); s.introduce(c);//实际呢?真正被传进去当作参数的对象的类型是C,运行结果是 I am class C A a1=s.Re_class(); a1.introduce();//返回参数类型为A,但是实际上是C类,输出结果为 I am class C } }
子类在覆盖父类方法是不能改变函数的权限或者说不能改小函数的权限,但是,可以放大权限,这是继承和覆盖的基本规则。
覆盖:方法名称相同,返回类型相同,参数相同,我们只是修改函数的内容。
重载:方法名相同,但是放回类型和参数不相同,参数不相同是指参数类型或者说是参数数目不同,但是只改变返回类型是被允许的,但是权限可以随便的改变。在另一种程度来说,我们是创建了一个新的函数,只是函数名称相同,但是我们只是为了相同的函数名实现在不同的情况下的目标功能而已。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树