Java学习笔记----面向对象3

文章详细介绍了Java中的抽象类,包括其定义、特点和使用规则,以及抽象方法的概念。接着讨论了面向对象的多态性,解释了多态的定义、注意事项及成员方法的调用规则。此外,还讲解了final关键字的作用,如修饰类、方法和变量。最后,阐述了接口的定义、内容和实现方式,强调了接口与多态性的关系。
摘要由CSDN通过智能技术生成

一、抽象类

(1)定义:如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。被abstract关键字修饰,其中可能包含抽象方法

抽象类的特点:抽象类除了不能创建对象之外,类的其他功能都正常(成员变量,构造方法,成员方法)

抽象类一般位于类结构的上层,用来定义有哪些功能,让具体的子类继承实现即可

抽象类只能用作基类,继承抽象类的非抽象类必须实现它所有的抽象方法,且实现方法的参数、返回值需与抽象方法相同

(2)抽象方法:是一种特殊的方法:它只有声明,而没有具体的实现,用abstract关键字修饰

注意:静态方法不能内修饰为抽象方法. 一个类中可以定义多个抽象方法

//抽象类
public abstract class Animal {
​
    private String name;
    private  int  age;
​
    public Animal() {
    }
​
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    /*
      抽象方法,定义方法,没有具体的实现.
     */
    public abstract void eat();
}
public  class Dog extends Animal{
    //在dog类中实现了eat方法
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
​
}

二、面向语言特征----多态

(1)定义:同一种事物,在不同时刻表现不同状态。二者存在直接或者间接的继承关系时,父类引用指向子类的对象,即形成多态。

(2)注意事项:注意成员调用时,分为编译期间和运行期间,编译期间: 写代码时由于类型上升为了父类类型,所以只能调用到父类中定义的成员,而在运行期间: 运行代码时,实际调用的是子类中重写的方法

对于子类如果没有重写父类中的方法,那么调用的是子类对象中父类的方法

(3)对成员方法的调用:对于非静态成员变量:编译看左边, 运行看右边(=的两端)

class Animal{
  void show() {
    System.out.println(“Anmial");
  }
}
class Cat extends Animal{
  void show() {
    System.out.println(“cat");
  }
}
Animal x = new Cat()
x.show() //调用的是子类中的方法

对于静态成员变量:编译看左边,运行也看左边

class Animal{
  static void show() {
    System.out.println(“Animal");
  }
}
class Cat extends Animal {
  static void show() {
    System.out.println(“Cat");
  }
} 
Animal x = new Cat()
x.show() //调用的是动物类中的静态成员方法

(4)向下转型:为了实现多态性,我们将子类类型向上转为了父类类型,但是一旦类型上升为父类类型,那么就调用不到子类中特有的方法。这就是多态在某种情况下的缺点. 解决办法:向下转型,把父类类型转为子类类型。作用是为了使用子类中特有的方法

class Animal{
  void eat(){ }
}
class Cat extendsAnimal{
  void look() {
    System.out.println("看家");
  }
}
Animal x=new Cat()
x.look();//编译报错,Animal类型中没有look方法
Cat m=(Cat)x; //需要向下转型,转为Cat类型
m.eat() ;
m.look();//子父类中的方法都可以使用

三、final关键字

final关键字作用:可以修饰类,方法,参数,成员变量

(1)final修饰类不能为抽象类和接口,因为final修饰的类不能被继承

(2)final修饰方法,修饰后方法不能被子类重写

(3) final修饰方法的参数,在方法内部不能修改参数值

(4)final修饰成员变量,两种情况:

//情况1: 在编码时,值就确定了,就直接进行赋值,后期都不能修改,此种情况最好加上static关键字,让其在内存中只有一份.
      static final int num = 10; 
//情况2: 每一个对象中都有一个常量,必须在构造方法中为常量进行初始化,一旦初始化后,值都不能更改
      final int count;

四、接口

(1)定义:是一种更为彻底的抽象,主要用来定义功能,它不关心具体的实现,只关心有何能力,使用interface关键字声明接口

(2)内容:jdk8之后接口可以定义4种内容: 1.静态常量 2.抽象方法 3.静态方法(jdk8之后才开始有的) 4.默认方法(jdk8之后才开始有的)

(3)接口的实现:类实现接口,一个类可以实现多个接口,类使用implements关键字实现接口,例如

public class MyInterfaceImpl implements MyInterface {
  public static void main(String[] args) {
    }
}
//格式:[访问修饰符] class 类名 extends 父类名 implements 接口名1,接口名2……{} 

(4)特性

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

接口与实现类之间存在多态性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值