java快速入门-----类的封装继承多态抽象接口

本文介绍了Java面向对象编程的核心概念,包括类与对象、封装(属性私有与get/set方法)、继承(子类继承父类,super关键字)、多态(概念、条件及实现)以及抽象类和接口的作用。这些概念构成了Java面向对象编程的基础,提高了代码的安全性、隐藏了实现细节,并提供了模块化的扩展方式。
摘要由CSDN通过智能技术生成

java面向对象

面向对象的本质:以类的方式组织代码,以对象的形式组织数据

三大特性:封装,继承,多态

一、类和对象

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。

 

Fruit.java

public class Fruit {
    private String privateVariable;   // 私有成员变量
    String defaultVariable;           // 默认访问修饰符成员变量
    protected String protectedVariable;   // 受保护的成员变量
​
    private void privateMethod() {
        System.out.println("私有方法");
    }
​
    void defaultMethod() {
        System.out.println("默认方法");
    }
​
    protected void protectedMethod() {
        System.out.println("受保护的方法");
    }
}
​

二、封装

(一)作用

1.提高程序安全性,保护数据

2、隐藏代码的实现细节

3、统一接口

4、增强系统可维护性

(二)属性私有以及get/set的使用

通常 类 中的属性我们将其 设置为 private 来防止外部类调用修改该类中该属性的值。 但 设置为 private 后,外部类创建对象无法 对该对象的属性进行赋值。此时可用 get /set 方法。

Fruit.java

public class Fruit {
    private String name;    // 私有成员变量
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
}
​

Main.java

public class Main {
    public static void main(String[] args) {
        Fruit apple = new Fruit();
        apple.setName("Apple");
​
        System.out.println(apple.getName());  // 输出:Apple
    }
}
​

三、继承

(一)使用

子类通过extends关键字能够继承父类的方法和成员变量

Fruit.java

public class Fruit {
    private String name;
​
    public Fruit(String name) {
        this.name = name;
    }
​
    public void eat() {
        System.out.println("吃" + name);
    }
}
​

Apple.java

public class Apple extends Fruit {
    private String color;
​
    public Apple(String name, String color) {
        super(name);  // 调用父类的构造方法
        this.color = color;
    }
​
    public String getColor() {
        return color;
    }
}
​

Main.java

public class Main {
    public static void main(String[] args) {
        Apple apple = new Apple("Apple", "Red");
        apple.eat();                   // 调用父类的 eat() 方法
        System.out.println(apple.getColor());  // 调用子类的 getColor() 方法
    }
}
​

1、子类能够继承 父类中的所有成员变量和方法,只是对于父类中的 private修饰的方法和成员变量由于访问权限的问题,不能直接在子类中访问。

2、所有的类都默认直接或者间接继承了Object 类

3、Java 中只有单继承没有多继承 (一个儿子只能有一个亲生父亲,一个父亲可以有多个儿子)

(二) super 关键字

Fruit.java

public class Fruit {
    protected String name;
​
    public Fruit(String name) {
        this.name = name;
    }
​
    public void eat() {
        System.out.println("吃" + name);
    }
}

Apple.java

​
public class Apple extends Fruit {
    private String color;
​
    public Apple(String name, String color) {
        super(name);  // 调用父类的构造方法
        this.color = color;
    }
​
    public void printInfo() {
        System.out.println("水果名称:" + super.name);  // 使用 super 访问父类的成员变量
        super.eat();  // 使用 super 调用父类的方法
    }

​
​

四、多态

(一)概念

多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状 态。

总的来说:同一件事情,发生在不同对象身上,就会产生不同的结果。

(二)实现条件

1、 必须在继承关系下,发生向上转型

2、子类必须重写父类中方法

3、通过父类的引用调用重写方法

1、使用父类类型的引用指向子类的对象; 2、该引用只能调用父类中定义的方法和变量; 3、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(此过程称为 :动态连接 或 动态调用) 4、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

Fruit.java

abstract class Fruit {
    public abstract void eat();
}
​

Apple.java

class Apple extends Fruit {
    @Override
    public void eat() {
        System.out.println("吃苹果");
    }
}
​
​

Orange.java

class Orange extends Fruit {
    @Override
    public void eat() {
        System.out.println("吃橘子");
    }
}
​

Main.java

class Main {
    public static void main(String[] args) {
        Fruit apple = new Apple();
        Fruit orange = new Orange();
​
        apple.eat();   // 输出:吃苹果
        orange.eat();  // 输出:吃橘子
    }
}
​

(五)抽象类

(一)概念

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

(二)实现

Fruit.java

public abstract class Fruit {
    public abstract void eat();
}
​
​

Apple.java

public class Apple extends Fruit {
    @Override
    public void eat() {
        System.out.println("吃苹果");
    }
}
​

Main.java

public class Main {
    public static void main(String[] args) {
        Fruit apple = new Apple();
        apple.eat();  // 输出:吃苹果
    }
}
​

(三)特点

1、 抽象类中可以写普通方法,但抽象方法必须在抽象类中

2、抽象类是无法进行实例化创建对象的,只能去实例化它的子类来创建对象。

abstract class Fruit {
    public abstract void eat();
​
    public void wash() {
        System.out.println("洗水果");
    }
}
​
class Apple extends Fruit {
    @Override
    public void eat() {
        System.out.println("吃苹果");
    }
}
​
class Main {
    public static void main(String[] args) {
        Fruit apple = new Apple();
        apple.eat();  // 输出:吃苹果
​
        apple.wash();  // 输出:洗水果
    }
}
​

(四)作用

(四)作用 抽象类这么抽象,那它的具体作用是什么呢?

其实利用抽象类,有利于提高代码的开发效率。

如: 创建一个游戏角色,其特性比较复杂,反复创建会比较麻烦,我们可以利用 抽象类 抽象其一些公有的特性,而后我们每创建一个角色,就可以去写一个子类 继承这个抽象类,再去重写一些其中方法,改掉一些不必要方法。可以提高开发效率,和可拓展性。

五、接口

(一)概念 接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。

在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

(二)语法规则 接口的定义格式与定义类的格式基本相同,将class关键字换成 interface 关键字,就定义了一个接口。

Fruit.java

public interface Fruit {
    void eat();
    String getName();
    String getColor();
}
​
​

Apple.java

public class Apple implements Fruit {
​
    public void eat() {
        System.out.println("吃苹果");
    }
​
​
    public String getName() {
        return "苹果";
    }
​
​
    public String getColor() {
        return "红色";
    }
}
​

Main.java

public class Main {
    public static void main(String[] args) {
        Apple apple = new Apple();
        apple.eat();  // 调用接口中的 eat 方法
​
        String name = apple.getName();  // 调用接口中的 getName 方法
        System.out.println("水果名称:" + name);
​
        String color = apple.getColor();  // 调用接口中的 getColor 方法
        System.out.println("水果颜色:" + color);
    }
}
​

在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接 口

interface Fruit {
    void eat();
}
​
interface Animal {
    void run();
}
​
class Monkey implements Fruit, Animal {
    @Override
    public void eat() {
        System.out.println("猴子吃水果");
    }
​
    @Override
    public void run() {
        System.out.println("猴子跑步");
    }
}
​

一个类实现多个接口时,每个接口中的抽象方法都要实现,否则类必须设置为抽象类。

即Java中不支持多继承,但是一个类可以实现多个接口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值