面向对象
万事万物皆对象,先有的对象再有的类
类:很多相似的东西进行抽象
对象——>抽象——>类——>封装、继承、多态
类——>实例——>对象
抽象为提取对象的关键特征,类为多个对象提取出关键特征的集合
①出现的动词为对象的行为,行为为一系列动作的集合。
②出现的名词为对象的属性,属性可以给出一个明确的值。
③方法一系列动作的集合,传递参数为方法的条件。
形参与实参
动态方法():必须有对象才能调用的, 标识符.方法
静态方法(static):没有对象也可以直接调用
构造方法的名字和类名相等,用在初始化的,没有定义构造方法时默认一个空的构造方法,创建对象时自动调用构造方法。
当有new时为类的实例化,开辟一个新的内存。
包命名:所在组织的倒叙写法(域名+类名)
一个包就是一个文件夹,为有效代码行第一行;
封装性
一,数据打包
二,访问控制(能见度)
①不加访问控制符,默认为package,只能在一个包内访问
私有属性、私用方法:别人无法调用,只有自己可以调用。
②public(属性公开化):在任意其他类中的任意位置,都可以(访问或者调用)被public修饰的属性或者方法。
③private:只能在本类中的调用的属性。
Static修饰的为静态对象,不需要创建对象,所有对象都可以调用它
其他为动态对象
静不可调动,动不可调静,静态对象在元数据区
String:是一个字符的容器,既然是一个容器,他一定符合容器的常用操作:定位、求长、替换
两种创建的方式:
String str = "liguocheng";
String str1 = new String("liguocheng");
两种输出一样,但是str不等于str1,地址不同
str的方法:
A.equals(B)用于判断对象内容是否相同
toCharArray()字符串转为数组
str.split(“a”):字符串从a处切割
String a=str.replace(“s”,“e”)将字符串中s变为e
string无法修改,StringBuffer,StringBuilder可修改,差别为线程安全问题
Integer是int的对象类型
内存
①程序计数器:
②栈:只记录开始位置(4个字节),物理地址
③堆:记录内容,在常量池出现的数据不会出现第二次
④方法区
⑤常量池
继承
extends
一个子类只能继承一个父类,链式继承
里氏替换原则:所有父类可以完成的工作,子类都可以完成
super指父类对象
this指本类对象
先创建父类对象再创建子类对象
构造方法不可继承
implements为实现
实现为继承的一部分
多态
多态的一种:
方法的重载:方法名一样,参数不同 或者 参数个数不同、参数类型,与参数名称无关
参数列表(入口)定了,出口一定唯一
//方法的重载
public void fun() {
}
public void fun(int a) {
}
public void fun(int a,int b) {
}
Interface接口:为一种规范
命名:大写I开头
public interface IUsb {
}
接口要使有意义,一定是公开的,关心整体,不关心个体
特点:可以声明属性,必须为静态的、公共的常量,不可改变
变量默认为public static final //静态的、公共的常量
方法默认为抽象方法,没有方法体的方法为抽象方法;默认为public abstract
在普通方法中,默认为default,接口中动态方法必须加default
接口中没有构造方法
public IUsb() {
}//接口中错误,不可以有构造方法
public interface IUsb {
/*
*1.属性:PSF(public static final) 如果不显示的申明,默认就是PSF
*显示的声明也必须是PSF
*2.普通方法,都是PA(public abstract), 没有方法体
*3.静态方法,static方法,可以有方法体,这个方法体放在方法区的元数据区
*4.默认方法,
*/
int hight = 3;//静态的、公共的常量
void input();//默认为抽象方法
static void foo() {
} //静态方法
default void output() {
System.out.println("nihao");
} //动态方法
}
java继承在类范畴中为单继承,在接口范畴中为多继承
类和类为继承关系,类与接口为实现关系,接口与接口也为继承关系
普通类 | 抽象类 | 接口 | |
---|---|---|---|
实现 | √ | √ | × |
单继承 | √ | √ | × |
多继承 | × | × | √ |
构造方法 | √ | √ | × |
创建对象 | √ | × | × |
属性 | √ | √ | PSF |
普通方法 | √ | √ | default |
抽象方法 | × | √ | √ |
类型转换
小类型转大类型没问题,大类型转小类型可能会出错
一个对象 instanceof 一个类型:判断这个类型是否包含这个对象