JAVA学习笔记六(面向对象编程)
1.方法:
(1)定义:修饰符 返回值类型 方法名(参数){
//方法体
//return 返回值
}
(2)静态方法、非静态方法
静态方法:public static void test1(){...}
生存时间非常长,和类一起加载
非静态方法:public void test2(){...}
生存时间比较短,类实例化时加载
在方法间相互传递的过程中,原来的对象不会被改变掉
(3)类是一种抽象的数据类型,对象是类的具体实力,类是对象的模板。
1.类里面只能有属性和方法;
2.使用new关键字创建对象的时候,除了分配内存空间外,还会给创建好的对象进行默认初始化以及对类中的构造器进行调用。
(4)构造器
1.类中的构造器也成为构造方法,有俩特点:和类名相同,必须没有返回类型,也没有void,例如: public person(){...}
构造器的作用主要就是实例化初始值。
2.构造可以隐式定义(不写),可以显式定义。如果是有参的,必须显式定义。可以有多个构造,程序会根据传入参数自动选择
3.new一个对象,本质是在调用构造器
4.alt + instert --->选择Constructor可以生成构造器,直接OK,生成有参构造,选择select none,生成无参构造.
5.定义了有参构造,如果还想用无参构造,就必须显式定义。
(5)创建对象内存分析
1.栈中存类,堆中存类实例化后的对象
(6)类与对象的小结:
1.类与对象: 类是一个抽象模板,对象是一个具体实例
2.方法: 定义、调用
3.引用:除了8大基本类型外的所有类型,都是引用类型。对象是通过引用来操作的, 栈--->堆(看上图)
4.属性(字段 成员变量):默认会初始化 属性定义: 修饰符 属性类型 属性名 = 属性值
5.对象的创建和使用: 必须使用new关键字创建对象,构造器 Person person = new Person();
对象的属性: person.name对象的方法:person.sleep()
6.类里面只能写静态的属性,动态的方法
(7)封装:
1.程序设计追求:高内聚、低耦合;内部细节自己完成,不对外。尽量暴露少量的方法给外部使用
2.alt+instert --->选择 “get set”,自动生成属性和方法

(8)继承:(只能单继承,不能多继承)
1.继承是类和类之间的关系,在java中,所有的类都默认继承object类
2.extends是继承的关键字 例: public class student entends Person{ ... }
3.子类继承了父类,就会拥有父类的全部public方法和public属性。
4.Ctrl+H:显示所有父子类关系。
5.在使用一个继承类时,使用this,调用的子类的属性值,使用super,调用的是父类的属性值。
6.new一个子类的方法,程序在执行时,隐式构造会先new了父类构造,然后再new子类。如果显式调用,调用父类的构造必须在子类的构造的第一行
7.super注意点:super调用父类的构造方法,必须在构造方法的第一个,其只能出现在子类的方法或者构造方法中;super和this不能同时调用构造方法。
8.super和this的区别:(1)this是本身调用者这个对象,super是父类的对象 (2)this没有继承也可以使用,super只能在继承条件下使用 (3)this():本类构造 super():父类构造
(9)重写:(需要有继承关系,子类重写父类的方法)
1.重写都是方法的重写,和属性无关。
2.方法名必须相同,方法体不同
3.参数列表必须相同(否则就变成重载了)
4.修饰符范围可以扩大但不能缩小: public > protected > default > private
5.抛出异常范围可以被缩小,但不能扩大
6.重写的意义在于:父类的功能,子类不一定需要,或者不一定满足。
7.静态方法的调用,之和左边定义的数据类型有关,非静态方法:叫重写
8.alt+instert:方法的重写快捷键
(10)多态:动态编译(可扩展性更强)
1.一个对象的实际类型是确定的,可以指向的引用类型就不确定了。
(例如:父类的引用,指向子类) Student s1 = new Student(); ->子类 Person s2 = new Student(); ->父类的引用指向子类
2.记住一句话,调用父类的方法时,如果子类没有重写父类的方法,则执行父类的方法。如果子类重写了父类的方法,调用父类的方法时,则执行子类的方法。
3.对象能执行哪些方法,和左边类型有关,和右边关系不大。例如: Person s2 = new Student(); 中,s2能执行哪些方法,和Person有关,和Student无关。
4.父类可以指向子类,但是不能调用子类独有的方法。子类能调用的方法都是自己的或者继承父类的。
5.多态是方法的多态,属性没有多态。
6.多态存在条件:有继承关系,需要重写。父类的引用指向子类的对象。
7.static方法属于类,不属于实例。final属于常量
(11)强制转换
1.子类转换为父类,向上转型;
2.把父类转换为子类,向下转型,强制转换;
3.强制转换的意义在于:方便方法的调用、减少重复的代码
(12)static方法
1.static在程序创建时就建立了。所以只执行一次。非静态代码块在实例化的时候创建,可能会随着实例化执行好多次
2.静态导入包, 例: import static java.lang.math.random;
(13)抽象类 abstract (不是重点,是为了引出接口)
1.只有方法名、类名,没有实现,就是抽象类和抽象方法。希望有人重写。
2.只要使用抽象类,就逃脱不了继承(接口)
3.抽象类不能new,只能靠子类去实现它:约束
4.一旦有抽象方法,其类一定是抽象类,抽象类里,可以有普通方法。
5.抽象类存在的意义:节省代码的开发,提高开发效率。
1.接口中所有定义都是抽象的 public abstract
2.接口都需要有实现类,类可以实现接口,但是必须要重写接口中的方法
3.类重写方法的标准定义: public class 类名 implements 接口名{ } (类里面必须重写接口里的方法,否则会报错)
4.接口不能被实例化,接口中没有构造方法


浙公网安备 33010602011771号