面向对象
1.面向对象思想编程内容的三条主线分别是什么?
-
类及类的成员:属性、方法、构造器:代码块、内部类
-
面向对象的三大特征:封装、继承、多态
-
其它关键字: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
-
super理解为:父类的
-
super可以用来调用:属性、方法、构造器
-
super的使用:
3.1 我们可以在子类的方法或构造器中,通过使用"super.属性"或"super.方法"的方式,显示调 用父类中声明的属性或方法。
3.2 特殊情况,当子类和父类中定义了同名的属性,我们要想在子类中调用父类中声明的属性,则必须显示的使用"super.属性"的方式,表明调用的是父类中声明的属性。
-
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); } }