比歧的魔法师吧 关注:7贴子:275
  • 4回复贴,共1

【初学java】java面向对象

只看楼主收藏回复

一楼喂百度


IP属地:辽宁1楼2014-12-29 14:38回复
    Java 继承
    继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承可以理解为一个对象从另一个对象获取属性的过程。
    如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来的。在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类
    继承中最常使用的两个关键字是extends和implements。
    这两个关键字的使用决定了一个对象和另一个对象是否是IS-A(是一个)关系。
    通过使用这两个关键字,我们能实现一个对象获取另一个对象的属性。
    所有Java的类均是由java.lang.Object类继承而来的,所以Object是所有类的祖先类,而除了Object外,所有类必须有一个父类。
    通过过extends关键字可以申明一个类是继承另外一个类而来的,一般形式如下:
    // A.java
    public class A {
    private int i;
    protected int j;
    public void func() {
    }
    }
    // B.javapublic class B extends A {}
    以上的代码片段说明,B由A继承而来的,B是A的子类。而A是Object的子类,这里可以不显示地声明。
    作为子类,B的实例拥有A所有的成员变量,但对于private的成员变量B却没有访问权限,这保障了A的封装性。


    IP属地:辽宁2楼2014-12-29 14:51
    回复
      注释:implements
      还有几点需要注意:
      (1)接口可以被多重implements,抽象类只能被单一extends
      (2)接口只有定义,抽象类可以有定义和实现
      (3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)
      比如:People是一个接口,他里面有say这个方法。
      接口的定义:
      public interface People{public void say();}
      但是接口没有方法体。只能通过一个具体的类去实现其中的方法体。
      比如 Chinese这个类,就实现了People这个接口。
      接口的实现:
      public class Chinese implements People{
      public void say() {
      System.out.println(" 你好!");
      }
      }
      接口的调用:
      People chinese = new Chinese() ;chinese.say();
      接口可以有不同的实现,即使用不同的类实现。
      在java中extends表示子类继承父类,如类A继承类B写成class A extends B{//.....}implements 的意思
      更接近“实现”,比如实现一个接口的方法。


      IP属地:辽宁3楼2014-12-29 15:02
      回复
        HAS-A 关系
        HAS-A代表类和它的成员之间的从属关系。这有助于代码的重用和减少代码的错误。
        例子public class Vehicle{
        }
        public class Speed{
        }
        public class Van extends Vehicle{
        private Speed sp;}
        Van类和Speed类是HAS-A关系(Van有一个Speed),这样就不用将Speed类的全部代码粘贴到Van类中了,并且Speed类也可以重复利用于多个应用程序。
        在面向对象特性中,用户不必担心类的内部怎样实现。
        Van类将实现的细节对用户隐藏起来,因此,用户只需要知道怎样调用Van类来完成某一功能,而不必知道Van类是自己来做还是调用其他类来做这些工作。
        Java只支持单继承,也就是说,一个类不能继承多个类。
        下面的做法是不合法的:
        public class extends Animal, Mammal{}
        Java只支持单继承(继承基本类和抽象类),但是我们可以用接口来实现(多继承接口来实现),脚本结构如:
        public class Apple extends Fruit implements Fruit1, Fruit2{}
        一般我们继承基本类和抽象类用extends关键字,实现接口类的继承用implements关键字。


        IP属地:辽宁6楼2014-12-29 17:08
        回复
          java 重写(Override)与重载(Overload)重写(Override)
          重写是子类对父类的允许访问的方法的实现过程进行重新编写!返回值和形参都不能改变。即外壳不变,核心重写!
          重写的好处在于子类可以根据需要,定义特定于自己的行为。
          也就是说子类能够根据需要实现父类的方法。
          在面向对象原则里,重写意味着可以重写任何现有方法。实例如下:
          class Animal{
          public void move(){
          System.out.println("动物可以移动");
          }
          }
          class Dog extends Animal{
          public void move(){
          System.out.println("狗可以跑和走");
          }}
          public class TestDog{
          public static void main(String args[]){
          Animal a = new Animal(); // Animal 对象
          Animal b = new Dog(); // Dog 对象
          a.move();// 执行 Animal 类的方法
          b.move();//执行 Dog 类的方法 }}
          以上实例编译运行结果如下:
          动物可以移动狗可以跑和走
          在上面的例子中可以看到,尽管b属于Animal类型,但是它运行的是Dog类的move方法。
          这是由于在编译阶段,只是检查参数的引用类型。
          然而在运行时,Java虚拟机(JVM)指定对象的类型并且运行该对象的方法。
          因此在上面的例子中,之所以能编译成功,是因为Animal类中存在move方法,然而运行时,运行的是特定对象的方法。


          IP属地:辽宁7楼2014-12-29 17:12
          回复