this关键字:
在调用方法的时候,java会自动把当前对象传递给该方法,在方法中由this来接收这个对象,还可以通过this调用类中的其他构造方法
构造方法:
1 public 类名(属性形参列表) {
}
2 没有返回值,在我们创建对象的时候自动调用构造方法
3 java会自动赠送每个类一个无参数的构造方法,如果自己定义了,就不会再赠送了
static 静态:
1 被static关键字修饰的内容是由各个对象所共享的,属于类的,不属于对象
2 例如:static String country = “唐朝”; 当改变一个对象的属性时,所有对象的属性都会变,但是推荐使用类名访问静态的内容
3 静态的特点:
1 数据由各个对象共享
2 优先于对象产生(先加载静态的内容,再产生对象),例如:武则天可以讲述秦始皇的历史,秦始皇不知道后世有个武则天
3 属于类,不属于对象!!!(很重要)
4 没有static修饰的方法是成员方法,必须要拿对象来访问,先创建对象
5 静态方法里可以直接调用静态的内容(例如main方法里可以直接调用静态的方法,没必要创建对象)
6 静态方法里不可以由 this 关键字,不可以调用非静态的方法(因为静态内容优先产生,秦始皇不能讲述武则天的历史)
访问权限:
1 导包: import 包名.类名;
2 public:公共的,所有人都可以访问,别的包中的类也可以使用
3 default:包内访问权限,在自己包内可以随意访问,别的包不行
4 private:私有的,只能在自己的类里面使用,自己的老婆只能自己用!
5 protected:在子类或同包下才可以使用
继承:
1 子类可以自动拥有父类中除了私有内容之外的所有东西
2 当出现 x 是 y 的一中时,就用继承,可以简化代码
3 方法重写:子类对父类中提供的方法进行重新定义(子类对父类提供的方法不满意,父类方法无法满足子类的需求)
4 方法重写的语法:子类的方法名和和返回类型要与父类完全一致!! 重写又成为方法的覆盖,子类方法把父类方法覆盖
super关键字:
1 super:表示父类中的内容
2 this:表示当前类中的内容
3 使用 super 和 this 可以用来区分父类和子类中的内容
4 super可以调用父类的构造方法,必须写在子类构造方法的第一行。( 注意父类的构造方法无参数时可以省略,有参数必须写, 格式为:super(参数列表) )
多态:
1 多态是建立在继承的基础之上的,有继承才有多态
2 同一个对象拥有多种形态(例如动物有 猫、狗、人等多种形态 / 我当时说你是动物你还反驳我?-.-)
3 作用:把多种不同的数据类型统一
4 把子类的对象赋值给父类的引用(变量) ------------>向上转型 (缺点:会屏蔽掉子类特有的方法,例如动物不会有猫的动作-----抓老鼠)
5 把父类的对象赋值给子类的引用(变量)------------->向下转型 (向下转型有风险,java要求必须强制类型转换,例如动物有很多种类,不一定是猫),用法:Cat c = (Cat) animal;
final关键字:
1 被final修饰的变量不可变,又称为常量
2 被final修饰的方法不可以被重写,被final修饰的类不可以被继承,(还记得String类就是final修饰的吗?)
3 总之final就是不可变!!! 可以用,不可以改!!
抽象:
1 抽疯 + 想象 : 简单理解就是你啥也看不出来
2 现实中不存在的东西,在java中只声明,不实现
3 使用 abstract 修饰,例如 public abstract void eat(); // 这里就是一个抽象方法,你看不出来方法里有什么,这就是抽象!
4 注意:抽象方法方法没有方法体,直接以分号结尾
5 特点:
1 抽象类不能实例化(也就是不可以创建对象)
2 抽象类的子类必须实现(或叫重写)抽象类的方法,否则子类必须也是抽象类,因为只要类中有一个抽象方法,该类必须是抽象类,否则程序报错
3 通过抽象类我们可以强制的要求其子类必须也有哪些方法
4 抽象类中也可以有正常的方法
接口:
1 接口实际上就是一种特殊的抽象类
2 接口中的方法必须全都是抽象方法,不可以有正常的方法(这里区别于抽象类)
3 接口用 interface 声明,与类的声明 class 不同
4 接口中的内容默认全部都是公开的,所以就没必要写 public 了啊
5 接口可以被继承,但只能被接口继承 (人只能生人)
6 接口和类之间只能是实现的关系 ,使用关键字 implements , 区别于继承 extends
7 类只能单继承,接口可以多实现,一个类只能继承一个父类,一个类能实现多个接口
8 接口中的属性都是全局(public)静态(static)常量(final)
成员变量的初始值:
1 java中的变量都必须先声明,后赋值,最后再使用
2 java中的成员变量会在创建对象的时候自动执行一次初始化操作,都会给一个默认值:
int ----> 0
boolean------>false
引用数据类型------->null (null表示空,什么都没有,先占位保证程序正确,以后需要再补全)
Object类:
在java中,所有类都继承 Object 类,即使不写 extends 继承关系,也会默认继承 Object 类
equals 和 == :
1 “==” 用于判断左右两边数据(内存地址)是否相等------>用于比较基本数据类型
2 equals:是 Object 类中提供的一个方法,比较两边对象是否相等 (用于引用数据类型)
3 “c1==c2” : 默认比较两个对象的内存地址 (之前创建了 Cat 类的对象 c1 和 c2)
4 “c1.equals(c2)”:两个对象比较用 equals() ,Cat类没有 equals(),默认调用父类 Object 类的 equas(),但是Object类提供的equals()也是比较内存地址,所有子类需要重写 equals,(重写规则你应该还记得把),自己写判断逻辑
5 判断字符串是否相等必须用 equals() ,String类帮我们重写了 equals(),比较的是字符串内容是否相等
toString():
1 toString()方法是对一个对象用字符串形式的描述
2 sout©:默认调用toString(),相当于 sout(c.toString());
3 java推荐你重写这个方法,因为默认的返回值太丑了啊,返回的是 包名.类名@对象的内存地址
instanceof关键字:
1 用于判断 xxx 对象 是否属于 xxx 类的
2 用法:对象 instanceof 类名
参数的传递问题:
1 值传递:把变量的值(内存地址)作为参数进行传递
2 引用传递:直接把变量作为参数传递
3 java中使用的都是值传递