【无标题】JAVA基础之面向对象

本文探讨了JAVA中的面向对象编程,包括类与对象的概念及其关系,类和对象的创建与执行的步骤,属性与局部变量的区别,继承的原理与好处,方法的重写,权限修饰符的四种类型,以及关键字super的使用。通过举例说明,如学生管理系统和顾客信息系统的案例,深入解析面向对象的思想在实际编程中的应用。
摘要由CSDN通过智能技术生成

面向对象

1.面向对象思想编程内容的三条主线分别是什么?

  1. 类及类的成员:属性、方法、构造器:代码块、内部类

  2. 面向对象的三大特征:封装、继承、多态

  3. 其它关键字:this、super、static、interface、final、package、import、abstract

2.谈谈你对面向对象中类和对象的理解,并指出二者的关系?

1.类 Class

具有相同属性和行为的对象的集合,它是一个抽象的概念,不指向任何具体的实物

属性:描述对象的特征,在程序中,体现成员变量

行为: 对象具有的动作或能力,在程序中,体现方法

2.对象 Object

对象是类的一个具体的实例, 是类的具体的表现

  • 名创建对象的语法:

​ 类名 对象名 = new 类名([参数]);

  • 读写属性:

​ 对象名.属性名;

  • 调用方法:

​ 对象名.方法名([参数]);

3.类和对象之间的关系

类是对象的集合,是抽象概念;对象是类的具体实例

通过new关键字创建(实例化)对象

3.面向对象思想的体现一:类和对象的创建和执行操作有哪三步?

① 创建类、设计类的成员

② 创建类的对象

③ 调用对象的结构 通过 对象.属性或者 对象.方法

4.对比 属性和局部变量

1.相同点

1.1 定义变量的格式:数据类型 变量名 = 变量值

1.2 先声明后使用

1.3 变量都有对应的作用域

2.不同点

2.1在类中声明的位置不同

属性:直接定义在类的一对{}内

局部变量:在声明方法内、方法形参、代码块内、构造器形参、构造器内部的变量

2.2 关于权限修饰符的不同

属性:可以再声明属性时,指明其权限,使用权限修饰符

​ 常用权限修饰符:private/public/缺省/protected/ --->封装性

局部变量:不可以使用权限修饰符

2.3默认初始化值的情况

属性:类的属性,根据其类型,都默认初始化

​ 整型(byte/short/int/long:0)

​ 浮点型(float/double:0.0)

​ 字符型(char:0或'\u0000')

​ 布尔型(Boolean:false)

​ 引用数据类型(类、数组、接口:null)

局部变量:没有初始化值

2.4在内存中加载位置

属性:加载到堆空间中(非static)

局部变量:加载到栈空间

5.继承 extends

1.继承的好处:

○减少了代码的冗余

○便于功能的扩展

○为之后多态的使用,提供了前提

2.继承的格式

class A extends B{}

A:子类、派生类 subclass

B:父类、超类、基类 superclass

2.1体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有属性和方法

​ 特别的,父类中声明为private的属性或方法,子类继承后,仍然为私有结构

​ 只有因为封装性的影响,使得子类不能只能调用父类的结构而已。

2.2 子类继承父类后,还可以声明自己特有的属性方法,实现功能的拓展

3.Java中继承的规定

Java只支持单继承和多层继承

▶一个子类只能有一个父类

▶一个父类可以派生多个子类

4.object是所有类的父类

6.方法的重写(覆盖)

概念及应用

♢重写(覆盖):子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作

​ 方法的声明 :权限修饰符 返回值类型 方法名(形参列表){

​ //方法体

​ }

♢应用:重写以后,当创建子类对象以后,通过子类对象调用字符类中的同名同参数的方法时,实际执行的子类重写父类的方法

区分方法的重载和重写(覆盖)

方法的重载:❶

​ ❷

​ ❸

方法的重写:❶方法名相同

​ ❷ 形参列表相同

​ ❸子类权限修饰符大于等于父类权限修饰符

​ ❹子类不可以声明父类的private方法

​ ❺返回值类型相同(void,基本数据类型)

​ 若父类返回值为一个具体类型比如A类型,子类返回值可以是A类或A类的子类

7.四种权限修饰符

修饰符 内部类 同一个包 不同包的子类 同一个工程

∆ private Yes

∆ 缺省 Yes Yes

∆ protect Yes Yes Yes

∆ public Yes Yes Yes Yes

☺对于class的权限修饰只可以用public和default(缺省)

public类可以在任意地方被访问

default类只可以被同一个包内部的类访问

8.关键字super

  1. super理解为:父类的

  2. super可以用来调用:属性、方法、构造器

  3. super的使用:

​ 3.1 我们可以在子类的方法或构造器中,通过使用"super.属性"或"super.方法"的方式,显示调 用父类中声明的属性或方法。

​ 3.2 特殊情况,当子类和父类中定义了同名的属性,我们要想在子类中调用父类中声明的属性,则必须显示的使用"super.属性"的方式,表明调用的是父类中声明的属性。

  1. super调用构造器

    4.1 我们可以在子类的构造器中显示的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器。

    4.2 "super(形参列表)"的使用,必须声明在子类构造器的首行。

    4.3 在类的构造器中,this(形参列表)和super(形参列表)只能二选一,不可以同时出现。

    9.例题1.学生管理系统,用arraylist

    package yeye.day05.exmple1;
    ​
    import java.util.Scanner;
    ​
    public class Test {
        public static void main(String[] args) {
            Student student = new Student();
            boolean flag = true;
            Scanner scanner = new Scanner(System.in);
            Menus menus = new Menus();
                while(flag){
                    menus.menu();
                    System.out.println("请输入你干嘛(1-5):");
                    int A = scanner.nextInt();
                    if (A>0 && A<6){
                        switch (A){
                            case 1:
                                menus.add();
                                break;
                            case 2:
                                menus.alter();
                                break;
                            case 3:
                                menus.delete();
                                break;
                            case 4:
                                menus.query();
                                break;
                            case 5:
                                flag=false;
    ​
                        }
                    }else
                        System.out.println("输入错误");
            }
    ​
        }
    }
    ​

10.例题2.顾客信息系统,用数组存

package yeye.day03;
​
import java.util.Scanner;
​
public class TestCustomer {
    public static void main(String[] args) {
        //1.创建数组存客户
        Customer[] customers = new Customer[10];
        //2.存放客户
        Customer c1 = new Customer("刘猪猪","猪",38,"123456789");
        Customer c2 = new Customer("刘小猪","男",28,"023456789");
        customers[0] = c1;
        customers[1] = c2;
        Menu menu = new Menu();
        Scanner scanner = new Scanner(System.in);
        int check ;
        boolean flag = true;
        //3.展示菜单
        do {
            menu.list();
            check = scanner.nextInt();
            if (check > 0 && check < 6) {
                switch (check) {
                    case 1:
                        menu.add(customers);
                        break;
                    case 2:
                        menu.alter(customers);
                        break;
                    case 3:
                        menu.delete(customers);
                        break;
                    case 4:
                        menu.find(customers);
                        break;
                    case 5:
                        flag = false;
                        break;
                }
            }else
                System.out.println("输入错了");
        }while (flag);
    }
}
​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值