java基础----面向对象(2)

1.继承

        继承是一种严格的父子关系(在父类里面抽取的属性和方法一定是所有子类所共有)(Student继承Person,那么Student就是人)

面向对象特征: 抽象、封装、继承、多态

OOP: Object  Oriented Programming 面向对象编程  

UML: 类图(描述类和类之间的关系)

Java是单继承,就是一个类只能继承extends(inherit)一个类,而java这中面向对象的语言就是对现实世界的描述,现实世界中是存在很多继承,但是java里面是支持实现多个接口。

Object是所有类的父类(这个父类不一定是直接父类)

private:只在当前类里面可以访问(子类也不能访问)

public:任何地方都可以访问

protected:提高代码复用性。

将所有子类共有的属性和方法抽取到父类里面,子类继承父类,那么父类里面的属性和方法相当于子类里面也有。

2.方法的重载 overload

在同一个类里面,允许存在一个以上同名方法,只要他们参数类型和参数个数不同即可。

构造方法重载(无参构造方法、有参构造方法)

方法重载特点:与返回值无关,只看参数列表。

void show(int a, char b, double c){}

1、void show(int x, char y, double z){}   不是重载,是同一个方法

2、int show(int a, double c, char b){}      是重载,参数顺序不一样,和返回值无关

3、void  show(int a, double c, char b){}  是重载,参数顺序不一样

4、boolean show(int c, char b){}          是重载

5、void show(double c){ }                     是重载

6、double show(int x, char y, double z){}  不是重载

3.重写(覆盖)@Override:toString()

1、子类覆盖父类,必须保证子类权限大于父类权限才可以覆盖,否则会编译失败。

2、如果父类是private的方法,子类是默认方法,那么子类是不知道这个方法的,不是覆盖。

重载(Overload):同一个类中看同名方法的参数列表。(构造方法重载)

重写(Override):父子类方法要一模一样

4.多态

面向接口(抽象)编程 

Cal.java

public abstract class Cal {
    int num1;
    int num2;

    public Cal() {
    }

    public Cal(int num1, int num2) {
        this.num1 = num1;
        this.num2 = num2;
    }

    public abstract int getResult();
}

Sub.java

public class Sub extends Cal{
    public Sub() {
    }

    public Sub(int num1, int num2) {
        super(num1, num2);
    }
    @Override
    public int getResult(){
        return num1 - num2;
    }
}

Add.java

public class Add extends Cal{
    public Add() {
    }

    public Add(int num1, int num2) {
        super(num1, num2);
    }

    @Override
    public int getResult() {
        return num1 + num2;
    }

}

Demo.java

import org.junit.Test;

public class Demo {
    @Test
    public void test1(){
        Add add = new Add(2,3);
        int result1 = add.getResult();
        System.out.println(result1);

        Sub sub = new Sub(3,1);
        int result2 = sub.getResult();
        System.out.println(result2);

        Cal cal = new Add(1,2);
        int result3 = cal.getResult();
        System.out.println(result3);

        add = new Add(1,2);
        show(add);

    }
    public void show(Cal cal){
        int result = cal.getResult();
        System.out.println(result);
    }
}

5.抽象类

1、抽象方法是没有方法体,如果这个类里面有抽象方法,这个类必须变成抽象类。

2、如果这个类是抽象类,并不要求这个类一定要有抽象方法

3、抽象类里面可以有普通方法,也可以有抽象方法。

4、如果一个类是抽象类,那么这个类就不能被new实例化,只能被其他类继承。

5、抽象方法可以理解为父类(抽象类)定义的一个模板或者规范(自己本身不实现),

子类必须实现这个抽象方法,如果子类不想实现这个方法,那么这个子类也必须要变成抽象类。

6.如果一个类里面有抽象方法,那么这个类一定是抽象类

6.接口interface

接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法)

接口就是一个规范,他没有提供任何是实现,具体的功能由实现接口的子类去实现。

接口就是一个规范,可插拔(可以被替换,首先定义一个标准(接口),大家都遵守这个标准,就可以实现互相之间替换)

1、接口是一个纯粹的抽象类,接口里面的方法都是抽象方法 public abstract。

2、接口里面所有的属性public static final

publicvoidtest1() {

   DaYandaYan=newDaYan();

   daYan.egg();

   daYan.fly();

   daYan.print();

   

   // bird是站在AbstractBird这个类角度去看new出来的DaYan这个对象,

   // 所以只能看到egg()这个方法

   AbstractBirdbird=newDaYan();

   bird.egg();

   // bird.fly();

   // bird.print();

   

   // 站在能不能飞IFly的角度去看DaYan,只能看到fly()这个方法

   IFlyfly=newDaYan();

   fly.fly();

   //fly.egg();

   //fly.print();

   fly=newGeZi();

   fly.fly();

}

继承是严格的父子关系,你继承什么你就是什么:鸽子就是鸟。

父类是抽取了所有子类的共同特征,父类里面的属性和方法是所有子类所共有的属性和方法。

接口是一个标准,一般用在能不能具有某个功能。

把能不能飞定义称为一个接口IFly,实现了这个接口的类就具有了这个功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值