多彩的生活作文600字:java 的一个概念问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 07:13:57
在java中,对象变量是多态的.而java中不支持多重继承。

这句话讲得是什么意思啊,"对象变量是多态的"怎样理解这句话啊.
多重继承又是啥意思?

谢谢,小弟是个初学者...在此谢了.

多态:在java程序中,当我们编写多个类时,这些类里可能会有一些方法想同,(如我们可以把矩形看成是图形,正方形看是矩形,于是正方形和矩形就有了图形的属性)然后分别用这些类来继承它
多重继承:是指一个类同时继承多个类,在java中是不允许这么做的,我这有一个特别经典的多态完成的一个程序你看看

//c07:Shapes.java
//这个程序是一个向上转型实现动态帮定

import java.util.*;
class Shape{
void draw(){}
void erase(){}
}
class Circle extends Shape{
void draw(){
System.out.println("Circle.draw()");
}
void erase(){
System.out.println("Circle.erase");
}
}
class Square extends Shape{
void draw(){
System.out.println("Square.draw()");
}
void erase(){
System.out.println("Square.erase()");
}
}
class Triangle extends Shape{
void draw(){
System.out.println("Triangle.draw()");
}
void erase(){
System.out.println("Triangle.erase()");
}
}
//和以上是组合的关系
class RandomShapeGenerator{
private Random rand=new Random();

public Shape next(){//反回一个对像
switch(rand.nextInt(3)){
default:
case 0:return new Circle();
case 1:return new Square();
case 2:return new Triangle();

}
}

}
public class Shapes{
private static RandomShapeGenerator gen=
new RandomShapeGenerator();

public static void main(String[] args){
Shape[] s=new Shape[9];
for(int i=0;i<s.length;i++)
s[i]=gen.next();//给引用填对像

for(int i=0;i<s.length;i++)
s[i].draw();//能过动态帮定调用哪一个方法

}
}

下面这个是他的实例可以供看看

//henry:ShapeDemo.java
//这是一个用继承而来的实例
import java.awt.*;
import java.applet.*;

abstract class Shape{ //这是一个抽像类
int x,y; //x y坐标
Color c; //色
Graphics g; //图形的一个引用
Shape(){} //无参构方法
Shape(int x,int y,Color c,Graphics g){
this.x=x;
this.y=y;
this.c=c;
this.g=g;
}
void setValue(int x,int y,Color c,Graphics g){
this.x=x;
this.y=y;
this.c=c;
this.g=g;
}
abstract double area();//相当于一个接口
abstract void draw();
}
class Square extends Shape{
int a;
Square(){}//构造方法 可以不要
Square(int x,int y,int a,Color c,Graphics g){
super(x,y,c,g);//super();是Shape(){}
this.a=a;
}
void setValue(int x,int y,int a,Color c,Graphics g){ //override
super.setValue(x,y,c,g);
this.a=a;
}
double area(){
return a*a;
}
void draw(){
g.setColor(c);
g.fillRect(x,y,a,a);//这是什么呢????
}
}

class Rectangle extends Square{
int b;
Rectangle(int x,int y,int a,int b,Color c,Graphics g){
super(x,y,a,c,g);
this.b=b;
}
void setValue(int x,int y,int a,int b,Color c,Graphics g){
super.setValue(x,y,a,c,g);//a==Sqare.a
this.b=b;
}
double area(){
return a*b;//反回长方形的面积
}
void draw(){
g.setColor(c);
g.fillRect(x,y,a,b);
}
}
class Circle extends Shape{//定义圆类,继承自形状类
int r;
Circle(){}
Circle(int x,int y,int r,Color c,Graphics g){
super(x,y,c,g);
this.r=r;
}
double area(){
return Math.PI*r*r;
}
void draw(){
g.setColor(c);
g.fillOval(x-r,y-r,2*r,2*r);
}
}
public class ShapeDemo extends Applet{
public void paint(Graphics g){
Square a=new Square();
a.setValue(20,20,100,Color.blue,g);
a.draw();
g.drawString("area of a="+a.area(),20,130);

Square b=new Square(160,20,50,Color.red,g);
b.draw();
g.drawString("area of b="+b.area(),160,80);

//Rectangle c=new Rectangle(160,100,100,150,Color.black,g);
//Square m;
//m=c;//向上转型
Square m=
new Rectangle(160,100,100,150,Color.black,g);

m.draw();
g.drawString("area of c="+m.area(),160,260);

Circle d=new Circle(320,100,50,Color.green,g);
d.draw();
g.drawString("area of d="+d.area(),280,160);

}
}
这是一个applet小应用程序,要在IE上再能运行

多态是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为

多重继承是说一个对象从多个父类继承下来.
而普通的继承只有一个父类

最简单的理解多态就是:类中可以有很多相同的方法名,但方法的参数类型或个数不一样。
JAVA不支持多重继承,是通过implements接口变相实现的多重继承。在JAVA中一个类只可能有一个父类,而在C++等支持多重继承的程序里,一个类可以有很多个父类,这样会变的混乱。