Talk is cheap,show you the code
本文有点长,打开目录食用更佳~
静态与非静态
静态方法 加修饰词 static
非静态方法
非静态可以调用静态和非静态,静态不可以调用非静态:
被static修饰的内容会跟随类的加载而加载,所以静态化的内容可以不用实例化就直接调用,同时两个静态方法之间也可以互相调用,
非静态则需要实例化存在以后才可以用。
值传递与引用传递
Java通常为值传递;
引用传递:
public class test7 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
change(person);
System.out.println(person.name);
}
public static void change(Person person){
person.name="我失恋了";
}
}
class Person{
String name;
}
这个操作始终是同一个new出来的name,打印的也是这个name,原值才会变;
对象
这是一个简单的创建对象,从代码层面讲,先有类(作为抽象的模板),再构成对象(作为具体的实例);
左边是创建的类,右边的lzd就是实例化了一个对象。
构造器(构造方法)
- 规范:
- 与类名相同
- 没有返回值(void也不行)
- 作用:
- new的本质是在调用构造方法
- 初始化对象的值
- 注意! 定义有参构造之后,默认无参构造函数会失效,若想使用无参构造,必须要显视的定义一个无参构造!
无参构造:
有参构造:
快捷键:alt+insert 可以用来创建构造器
面向对象三大特性
一.封装(对数据的隐藏)
通常,应禁止访问一个对象中的实际数据,而应该通过接口操作。
属性私有!与public相反 要用private !! 同时访问需要get/set;
同样,alt+insert可以快捷插入get/set。
二.继承
关键字 extends 子,继承父的所有(private私有的东西无法直接被调用)
super和this
正常调用:
注意!
- super调用父亲的构造方法,必须在构造方法的第一个:
-
super只能出现在子类的方法和构造方法中;
-
super不能和this同时调用构造方法:
- 代表的对象不同:
- this代表自己本身这个对象,没有继承也可以用
- super代表父类这个对象,且只有在继承条件下才能用
重写(->多态)
- 方法名,参数列表必须相同;
- 修饰符:范围可以扩大不可缩小:public>protected>default>private;
- 抛出的异常:范围可以缩小不可扩大;
- 必须是非静态,不可使用static:
- 只能由子重写父。
static:
非静态:
作用: 父类的功能子类不需要或者不满足 快捷键:alt+insert
三.多态
- 多态是方法的多态,属性没有;
- 存在条件:必须是继承关系,方法需要重写,父类引用指向子类对象;
- 父类子类拥有同一个方法时,子类调用是调用子类的方法;如果只有父类有,则继承父类,调用父类方法;
- 父类子类拥有同一个方法时,父类调用是调用子类的方法;如果子有父类有,父类无法调用方法:
(因为 B b=new A(); 本质上b的类型是B,而父类不会继承子类的任何东西)
instanceof
左边是对象,右边是类,返回类型是Boolean类型。它的具体作用是测试左边的对象是否是右边类或者该类的子类创建的实例对象,是则返回true,否则返回false。
抽象类
关键词:abstract
注意:
- 不能用new去创建对象,它是用来让子类继承的;
- 抽象方法,只有方法的声明,没有方法的实现,要靠子类去实现;
- 抽类不一定有抽象方法,但有抽象方法的类一定要声明为抽象类;
- 如果子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则子类也为抽象类。
接口(关键字:interface)
- 只能定义方法,不能实现方法,必须有实现类;
- 方法都是public abstract;常量都是public abstract final;
- 接口不能实例化;
- 可以实现多继承,并且必须重写接口中的方法:
内部类
-
成员内部类:
-
静态内部类(因为static是静态,代码运行时就已经加载完了,不可以调用非静态)
- 局部内部类:
- 匿名内部类(没有名字初始化类,不会保存实例到变量中)
看到这里,初步的面向对象也就有了一定的了解~
还是要多手搓代码熟练啊~~