java复习笔记——面向对象(二)

java复习笔记——面向对象(二)

  • this与super
  • override与overload
  • Interface与abstract类
  • final与static
  • 多态
  • 枚举、内部类

接口与抽象类

类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。接口无法被实例化,但是可以被实现。

在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

抽象类和接口的区别:

  1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是** public static final **类型的。
  3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

注: 抽象类和接口都可以有实体方法。接口中的实体方法,叫做默认方法;接口里也可以有静态方法和方法体了。(均为JDK 1.8新特性)

抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

public abstract class A {

    String name;

    // A的子类会被要求实现抽象方法move
    public abstract void move();
 
}

public class B extends A {
    
    // B作为A的子类实现抽象方法move
    public abstract void move(){
        
        System.out.println("B move");

    }
} 

接口

接口的作用就是把定义接口的人和实现接口的人分开,实现接口的人不必要关心谁去定义,而定义接口的人也不用关心谁实现的接口。简单、规范性、易维护、易拓展。

interface A {
   public void play();
   public void eat();
}

interface B {
   public void move();
}

//在Java中,类的多继承不合法,但接口允许多继承。
interface AB  extends A, B{

}

//C有A,B两个接口
public class c implements A, B{
    public void play(){
        System.out.println("C play");
    }
    public void eat(){
        System.out.println("C eat");
    }
    public void move(){
        System.out.println("C move");
    }
}

final与static

final修饰符

final修饰作用
被修饰的类不能够被继承
方法被修饰的方法不能够被重写
变量被修饰的变量只有一次赋值机会
引用被修饰的引用只有1次指向对象的机会

static修饰符

  • 静态变量:
    static 关键字用来声明独立于对象的静态变量,即类没有实例化时就可直接使用。无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。

  • 静态方法:
    static 关键字用来声明独立于对象的静态方法,即类没有实例化时就可直接使用。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后给出数据运行结果。

多态

多态是同一个行为具有多个不同表现形式或形态的能力。
例如:同一个接口,使用不同的实例而执行不同操作;+ 符号可以作为算数运算,也可以作为字符串连接;父类的引用可以指向子类对象。

多态的优点:1. 消除类型之间的耦合关系。2. 可替换性。3. 可扩充性。4. 接口性。5. 灵活性。6. 简化性。

//接口的多态
public interface A {
   public void eat();
}
public class B implements A {
    public void eat(){
        System.out.println("B eat");
    }
}
public class C implements A {
    public void eat(){
        System.out.println("C eat");
    }
}

//类的多态
public class Ball {
    public void play(){
        System.out.println("Play");
    }
}
public class BasketBall extend Ball{
    public void play(){
        System.out.println("Play Basketball");
    }
}
public class FootBall extend Ball{
    public void play(){
        System.out.println("Play Football");
    }
}

运行代码:

public static void main(String[] args) {
    //接口的多态
    A b = new B()
    A c = new C()
    b.eat();  //输出b eat
    c.eat();  //输出c eat
    //类的多态
    Ball basketball = new BasketBall();
    Ball football = new Football();
    basketball.play();   //输出Play Basketball
    football.play();    //输出Play Football
}  

枚举、内部类

枚举

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

enum Color {
    RED, GREEN, BLUE;
}
 
public class Test {
    public static void main(String[] args) {
        // 调用 values(),返回枚举类中所有的值。
        Color[] arr = Color.values();
 
        // 迭代枚举
        for (Color col : arr) {
            // 可以找到每个枚举常量的索引,就像数组索引一样。
            System.out.println(col + " at index " + col.ordinal());
        }

        // 使用 valueOf() 返回枚举常量,不存在的会报 IllegalArgumentException
        System.out.println(Color.valueOf("RED"));
    }
}

内部类

内部类分为四种:非静态内部类、静态内部类、匿名类、本地类
主要记录下匿名类和本地类

  • 内部类:
    内部类指在已有的类中成员位置再声明一个类。

  • 匿名类:
    匿名类指的是在声明一个类的同时实例化它,在Android代码中较为常用。

  • 本地类:
    本地类可以理解为有名字的匿名类

代码示例:

public abstract class A {

    public abstract void eat();
    
    public static void main(String[] args) {
        //匿名类
        A a = new A(){
                //实现A的抽象方法eat
                public void eat() {
                    System.out.println("A Eat");
                }
            };
        a.eat(); //输出A Eat

        //本地类
        class B extends A{
            //实现A的抽象方法eat
            public void eat() {
                System.out.println("B Eat");
            }
        }   
        B b = new B();
        b.eat(); //输出B Eat
    }
}

参考连接:
https://www.runoob.com/java/java-polymorphism.html
https://how2j.cn/k/interface-inheritance/interface-inheritance-interface/289.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值