java编程-面向对象---继承和多态
来源:互联网 发布:ubuntu怎样运行exe 编辑:程序博客网 时间:2024/06/10 04:31
(参考http://java.chinaitlab.com/List_186_17.html)
class Animal
{
private int weight;
public int getWeight()
{
return weight;
}
public void setWeight(int w)
{
weight=w;
}
}
class Dog extends Animal
{
/**
*子类新增方法
*/
public void Bark()
{
System.out.println("Wang~~Wang~~~");
}
}
public class aaa
{
//private static Dog myDog;
public static void main(String args[])
{
Dog myDog;
myDog=new Dog();
myDog.setWeight(50);
System.out.println("My Dog's Weight is"+myDog.getWeight());
myDog.Bark();
}
}
下面我们来看一下,经常用到的重要概念,也就是java语言的的OOP特性,这是对于OOP而言的,不含前面的OOA和OOD的。因为是初学嘛,还没有学到怎么分析和设计呢。Java的OOP有三大特性:封装、继承、多态。
封装的概念已经说过了,我们讲的是,它用权限修饰符private使得属性不能被外界访问,像是人的五脏六腑怎么能让人随意的碰呢?人的这个属性也是要封装的。如有再不明白,请访问我们的技术论坛 。
说一下容易理解的继承:
当一个类是另一个类的特例时,这两个类之间具有父子类的关系。子类继承了父类的方法和属性,就是说子类可以重用父类中的这部分代码。比如:轿车是车的一个特例。轿车是车的子类。就是说,轿车继承了车的一切特性。继承用关键字extends表示。
实践:
//这是基类 public class Che { private int wheel = 4; public int getWheel() { return wheel; } } public class Jiaoche extends Che { private String pinpai = "桑塔纳"; public String getPinpai() { return pinpai; } } public class Testche { public static void main(String[] args) { Jiaoche car = new Jiaoche(); int wheels = car.getWheel(); //调用基类的方法 String Pinpal = car.getPinpai();//调用本身的方法 System.out.println("车有 "+wheels+" 个轮子"); System.out.println("轿车的品牌是 "+Pinpal); } } |
对于继承来说,很容易理解因为你就看字面的意思就知道它是继承着父类的特性。多态字面不容易理解了。下面我们具体讲一下吧!
类之间的继承关系使子类具有父类的所有变量和方法,=> 父类所具有的方法也可以在它所有子类中使用,发给父类的消息也可以发送给子类 => 子类的对象也是父类的对象=>子类的对象既可以做本身的类型,也可以做父类的类型。 呵呵,上述推导公式好像绕口令似的。我们举个例子理解上述概念。举例:
public class 动物 //动物是父类
public class 猫 extends 动物 //猫是子类
动物的所有特性在猫中可以使用,发给动物的信息猫也能收到=>猫的对象new 猫();既可以作为本身的类型 猫 a=new 猫(); 也可以作为父类的类型 动物 b = new 猫();这样说理解了吗?如有疑问请访问我们的技术论坛。
如果大家明白了的话,我们就可以从上述公式推导出结论,所有的子类都可以作为父类的类型(同一种类型)来对待。像刚才那个动物有很多子类啊,可以有很多对象。动物 a=new 猫();动物 b=new 狗(); 动物 c=new 猪();。这样的将子类型的对象引用转换成父类型的对象引用,叫做上溯造型(upcasting)。
我们再来引伸一下,我们在数组那节课里讲了,数组存放的元素是相同类型的数据,但是上溯造型使得java允许创建不同类型对象的数组。例如:
Employee[] staff = new Employee[3]; staff[0] = new Manager(); staff[1] = new Secretary(); staff[2] = new Employee(); |
夷?这是怎么回事啊,数组里面不是相同类型吗?对啊,因为Sectetary和Manager是Employee的子类,所以也可以通过上溯造型变成Employee啊。以前我们还学到了所有对象都是从java.lang.Object 继承下来的。如果数组要是 Object型的话 Object[] obj=new Object[];那就是里面放什么对象都行了。因为什么对象都可以是Object型的。
实践:
// java中的多态 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()"); } } public class Shapes { public static Shape randShape() { switch((int)(Math.random() * 3)) { default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); } } public static void main(String[] args) { Shape[] s = new Shape[9]; // 向数组里添加类型 for(int i = 0; i < s.length; i++) s[i] = randShape(); // 用多态的方法调用 for(int i = 0; i < s.length; i++) s[i].draw(); } } |
Java的多态性,有什么意义呢?它的突出优点是使程序具有良好的扩展性。它通过继承,可以派生出任意多个新类型,或向基类增加更多方法时,无须修改原有对基础类进行处理的相关程序。就是扩展性好。
我们返回再看面向对象(专指OOP)的这三个特性封装、继承、多态三者的关系。没有封装就没有继承,没有继承就没有多态。
abstract class shape{
int x,y;
String color;
public shape(){
x=0;
y=0;
}
public shape(int xx,int yy){
x=xx;
y=yy;
}
void setColor(String str){
color=str;
}
abstract double getArea();
}
class Rect extends shape{
public Rect(int xx,int yy){
super(xx,yy);
}
double getArea(){
return x*y;
}
}
class oval extends shape{
public oval(int xx,int yy){
super(xx,yy);
}
double getArea(){
return 0.5*x*x*y*y;
}
}
class aaa{
public static void main(String[] args){
// shape sh=new shape(10,10);
Rect rc=new Rect(10,10);
System.out.println(rc.getArea());
oval ov=new oval(20,10);
System.out.println(ov.getArea());
}
}
- java编程-面向对象---继承和多态
- 深入Java 面向对象编程 (二)继承与多态
- 面向对象编程——继承和多态
- 面向对象编程中的多态和继承
- 第十章 面向对象编程:继承和多态
- 【Python学习笔记】面向对象编程:继承和多态
- 《Java面向对象编程》学习笔记6——继承和多态
- java面向对象编程(OOP):封装、抽象、多态和继承
- 黑马程序员-JAVA面向对象封装、继承和多态
- java基础面向对象继承和多态
- java面向对象中的封装、继承和多态
- java面向对象特性-封装、继承和多态
- java中的面向对象(封装、继承和多态)
- 7面向对象---继承和多态
- Javascript 面向对象,继承和多态
- 面向对象:继承、重写和多态
- 面向对象编程(Java)--动物继承
- 《JAVA面向对象编程》读书笔记-继承与组合
- 转自菊花论坛得网管相关
- 变频器基础原理
- 注册表
- 单建模式(Singleton)
- 转自的网管相关2
- java编程-面向对象---继承和多态
- 利用一款不常见的API函数实现窗口的淡入淡出
- ASP.NET程序中常用的三十三种代码(强荐)!
- 我的开发工具与环境( g++, Eclipse , qt-4.4.3 )
- 网络+C#各个网上转载
- Java中重载(overload)和重写(override)的区别
- 假装
- 牡丹江风景
- 小应用程序