您的位置:首页 > 编程语言 > Java开发

关于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

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 继承 多态