欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java基础/新手入门之面向对象OPP(Part03)

程序员文章站 2024-03-23 18:23:58
...

关联关系

概念:对象与对象之间的连接.一个类做为另一个类的属性类型存在.(has)

关联关系分为单向关联和双向关联.

单向关联:A类关联B类

public Mobile mobile;//(一对一)
public Mobile[] mobiles;// 使用数组 一对多

**双向关联:**A类关联B类,B类关联A类

public class Phone {
     private Person person;
  }
public  class Person {
    private Phone phone;
}

依赖关系

依赖关系(use):指一个类A使用到了另一个类B.但是类B的变化会影响到类A.

public void eattwice(Dog dog){    
     dog.eat();    //依赖关系表现为类B作为参数被类A在某个method
}

抽象类(abstract)

抽象类(: 如果一个类中没有包含足够的信息来描绘一个具体的对象.它只有声明,而没有具体的实现.

特点:

1)抽象类不能被实例化,但可以有构造函数,因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象.

2)抽象类只能用作基类.表示的是一种继承关系.继承抽象类的非抽象类必须实现其中的所有抽象方法,而已实现方法的参数,返回值要和抽象类中的方法一样.否则,该类也必须声明为抽象类.

public abstract class Animal {    
	public abstract void eat();    
	public void play(){        
	    System.out.println("出去玩");    
    }
}

接口(interface)

接口可以理解为abstract.用接口去实现多继承的关系

接口的特性

1)接口不可以被实例化;

2)实现类必须重写接口的所有方法;

3)实现类可以实现多个接口;

4)接口中的变量都是静态常量.

格式

[访问修饰符] interface 接口名称 [extends 其他的接口名1,….其他的接口名n] {

​ 声明常量;

​ 抽象方法;

}

package day13;
//interface 关键字修饰接口
/*
接口与接口的关系:
    接口继承接口  一个接口可以继承多个接口
 */
public interface Animal extends InterfaceA,InterfaceB {
    /*
    接口:
      理解为一个纯粹的抽象类,  在接口中定义抽象方法
     */
    /*
    接口定义的成员变量是一个常量,默认被 public static final 修饰
     */
//    public static final int num = 10;
     int num = 10;

     /*
     jdk8以后接口中声明的抽象方法默认被 public abstract 修饰
      */
     public abstract void eat();
     void sleep();

     /*
     jdk8以后加入静态方法,默认方法
      */
     public static void play(){ }
     //默认方法
    public default void keep(){    }
}


Java中的多继承

  • 实现类可以实现多个接口

  • 接口中的变量都是静态常量

  • 多个类可以实现同一个接口

  • 一个类可以实现多个接口,但只能继承一个类

  • 一个接口能继承其他多个接口

3.接口中是隐式抽象的,当使用一个接口时的时候,不必使用abstract关键字。

4.接口中每一个方法是隐式抽象的,默认为:public abstract

5.接口中声明的属性默认为: public static final

6.接口不是被类继承了,而是被类实现。

7.当类实现接口的时候,类要实现接口中所有的方法。否则,累必须声明为抽象的类。

8.接口与实现类之间存在多态性。接口不能实例化对象(无构造 方法),但可以声明对象的引用。(多态性)

多态

同一种事物,在不同时刻表现不同的状态。

多态存在的三个必要条件:

1)要有继承(包括接口的实现)(前提条件)

2)要有重写(前提条件)

3)父类引用指向子类对象

多态存在的三个必要条件:

  • 要有继承关系;
  • 要有方法重写;
  • 父类引用指向子类对象。
 /*
 编译看左边,运行期间看右边
 当编译期类型是父类,运行期类型是子类时,被称为父类引用指向子类对象。
 */
Animals dog= new Dog();// Animals的引用指向Dog的对象

Final

final关键字用于声明方法,属性,类

final关键字修饰的类,不能被继承

public class FinalDemo {
    //final修饰的变量变成了常量(不能够改变了)
    static final int a = 5;//直接赋值法.建议用static修饰,在内存中只有一份.

    final int num;//间接赋值(在方法中赋值)
    //在创建的每一个对象中都包含一个常量,必须在构造方法中赋值.
    public  FinalDemo(int i){
        num = i;
    }

    //final 修饰的方法  不能被子类重写 @Override
    public final void method(){
        System.out.println("final修饰的方法");
    }
}

上一篇: 关于Object.defineProperty()

下一篇: