A:封装概述
* 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
* B:封装好处
* 隐藏实现细节,提供公共的访问方式
* 提高了代码的复用性
* 提高安全性。
* C:封装原则
* 将不需要对外提供的内容都隐藏起来。
* 把属性隐藏,提供公共方法对其访问。
面向对象特征
* 封装(encapsulation)
* 继承(inheritance)
* 多态(polymorphism)
final修饰特点
* 修饰类,类不能被继承
* 修饰变量,变量就变成了常量,只能被赋值一次
* 修饰方法,方法不能被重写
static关键字的特点
* a:随着类的加载而加载
* b:优先于对象存在
* c:被类的所有对象共享
* 举例:咱们班级的学生应该共用同一个班级编号。
* 其实这个特点也是在告诉我们什么时候使用静态?
* 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
* 举例:
* 饮水机(用静态修饰)
* 水杯(不能用静态修饰)
* 共性用静态,特性用非静态
* d:可以通过类名调用
* 其实它本身也可以通过对象名调用。
* 推荐使用类名调用。
* 静态修饰的内容一般我们称其为:与类相关的,类成员
A:static的注意事项
* a:在静态方法中是没有this关键字的
* 如何理解呢?
* 静态是随着类的加载而加载,this是随着对象的创建而存在。
* 静态比对象先存在。
* b:静态方法只能访问静态的成员变量和静态的成员方法
* 静态方法:
* 成员变量:只能访问静态变量
* 成员方法:只能访问静态成员方法
* 非静态方法:
* 成员变量:可以是静态的,也可以是非静态的
* 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
* 简单记:
* 静态只能访问静态。
静态变量和成员变量的区别
* 静态变量也叫类变量 成员变量也叫对象变量
* A:所属不同
* 静态变量属于类,所以也称为为类变量
* 成员变量属于对象,所以也称为实例变量(对象变量)
* B:内存中位置不同
* 静态变量存储于方法区的静态区
* 成员变量存储于堆内存
* C:内存出现时间不同
* 静态变量随着类的加载而加载,随着类的消失而消失
* 成员变量随着对象的创建而存在,随着对象的消失而消失
* D:调用不同
* 静态变量可以通过类名调用,也可以通过对象调用
* 成员变量只能通过对 象名调用
#格式的解释:
public static void main(String[] args) {}
* public 被jvm调用,访问权限足够大。
* static 被jvm调用,不用创建对象,直接类名访问
* void被jvm调用,不需要给jvm返回值
* main 一个通用的名称,虽然不是关键字,但是被jvm识别
* String[] args 以前用于接收键盘录入的
A:继承(extends)
让类与类之间产生关系,子父类关系
继承的好处和弊端
* A:继承的好处
* a:提高了代码的复用性
* b:提高了代码的维护性
* c:让类与类之间产生了关系,是多态的前提
* B:继承的弊端
* 类的耦合性增强了。
* 开发的原则:高内聚,低耦合。
* 耦合:类与类的关系
* 内聚:就是自己完成某件事情的能力
* A:Java中类的继承特点
* a:Java只支持单继承,不支持多继承。(一个儿子只能有一个爹)
* b:Java支持多层继承(继承体系)
Java中类的继承特点
* 如果想用这个体系的所有功能用最底层的类创建对象
* 如果想看这个体系的共性功能,看最顶层的类
* A:继承的注意事项
* a:子类只能继承父类所有非私有的成员(成员方法和成员变量)(private String name;可以通过setXxxx和getXxxx方法获取)
* b:子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
* c:不要为了部分功能而去继承
* B:什么时候使用继承
* 继承其实体现的是一种关系:"is a"。
采用假设法。
如果有两个类A,B。只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。
* A:this和super都代表什么
* this:代表当前对象的引用,谁来调用我,我就代表谁
* super:代表当前对象父类的引用
* B:this和super的使用区别
* a:调用成员变量
* this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
* super.成员变量 调用父类的成员变量
* b:调用构造方法
* this(...) 调用本类的构造方法
* super(...) 调用父类的构造方法
* c:调用成员方法
* this.成员方法 调用本类的成员方法,也可以调用父类的方法
* super.成员方法 调用父类的成员方法
继承中构造方法的关系
* 子类中所有的构造方法默认都会访问父类中空参数的构造方法
* 因为子类会继承父类中的数据,可能还会使用父类的数据。
* 所以,子类初始化之前,一定要先完成父类数据的初始化。
* 其实每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。
* 父类没有无参构造方法,子类怎么办?
* super解决 //a,若子类空参构造:直接传递实际参数(super(实际参数))去访问父类有参构造;this(实际参数)访问本类有参构造super(形参)
* this解决 //b,若子类有参构造:super(形参)访问父类有参构造.
* B:注意事项
* super(…)或者this(….)必须出现在构造方法的第一条语句上
A:多态(polymorphic)概述
* 事物存在的多种形态
* B:多态前提
* a:要有继承关系。
* b:要有方法重写。
* c:要有父类引用指向子类对象。
多态中的访问特点: 属性(编译看父类,运行看父类) 静态绑定; 行为(编译看父类,运行看子类,static修饰的除外) 先静态绑定,后动态绑定.
多态中向上向下转型:
首先要有向上转型(父类引用指向子类对象),然后才能向下转型
Person p = new SuperMan(); SuperMan sm = (SuperMan)p;
A:抽象类的成员特点
* a:成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量
* b:构造方法:有。
* 用于子类访问父类数据的初始化。
* c:成员方法:既可以是抽象的,也可以是非抽象的。
抽象类的成员方法特性:
* a:抽象方法 强制要求子类做的事情。
* b:非抽象方法 子类继承的事情,提高代码复用性。
一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
* 可以
* 这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成
接口中的成员变量和成员方法:
成员变量:只能是常量,并且是静态的 公共的.
默认修饰符:public static final,建议自己手动给出.
构造方法: 接口中没有构造方法.
一个类不写继承任何类,默认继承object类
成员方法:只能是抽象方法.默认修饰符是 public abstract
类与类: 继承关系,只能单继承,可以多层继承
类与接口: 实现关系(implements),单实现,多实现.class A implement B,C
接口与接口: 继承关系(extends),单继承,可多继承.
接口的设计理念
抽象类被继承体现是 "is a" 的关系. 定义该继承体现的<共性功能>.
接口被实现体现的是 "like a" 的关系. 接口中定义的是该继承体系的<扩展功能>.
day10:面向对象
Package是文件夹,将字节码文件进行分类存放.
编译带包的类:
javac -d . 类名.java
java 包名.类名
package java.util.Scanner;
package 导入的是具体的类(Scanner)
内部类:
内部类可以无条件的直接访问外部类的成员,包括私有.
class Outer {
class Inner {
show();
}
}
外部类要访问内部类的成员,必须创建对象:
外部类名.内部类名 对象名 = 外部类对象.内部类对象
Outer.Inner oi = new Outer().new Inner();
链式编程:
每次调用方法后还能继续调用方法,
证明调用方法后返回的是对象.
匿名内部类本质: 继承了该类或者实现了
该类接口的一个子类对象.
8.简述==和equals的区别?
答:参考答案
(1)==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
(2)equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,
equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
|
|