初识Java
Java是一门面向对象的语言
包含:属性(成员变量)、方法
默认初始化:数字-0、char-u0000、boolean-false、引用-null
重载:一个方法名对应多个方法
重写:必须具有相同的方法名称.参数列表.返回类型
new:创建一个对象(实例化)、引用(父类引用子类对象)
外部类:直接一个类
内部类:在一个类内再定义一个类
通过外部类来实例化内部类 Outer.Inner inner = out.new Inner();
外部类名.内部类名 s = 外部类名.new 内部类名
栈(自动分配连续的空间,后进先出)放置局部变量、变量的引用
堆(不连续):放置new出的对象
方法区:(也是堆)存放类的代码信息、static变量、常量池
静态方法static是类的方法,非静态方法是对象的方法
有static时,调用的是类的方法(通过类名.来访问)
无static时,调用的是对象的方法
有static可直接调用,无static则需先实例化一个对象再通过实例化对象调用
在A类中可通过【B.方法名】直接 调用B类中的static(静态)方法,
非静态方法:需要先实例化new这个类(类是抽象的,类实例化后会返回自己的一个对象)
Student s = new Student
对象类型 对象(名) = 对象值
((类型)对象)可以强制转型
【static和类一起加载 当类存在时它就存在了;而非静态(无static)则需要类实例化之后才存在
this.属性(当前这个类的属性)
-
构造器(构造方法)
1.必须和类名相同
2.必须没有返回类型,也不能写void
实例化初始值
1.使用new关键字 本质是在调用构造器
2.用来初始化值 -
封装
public
protected
default默认的
private属性私有,别的类不能直接引用,可设置方法给别的类操作:
getName:return this name获得这个数据
setName:this.name = name给这个数据设置值 -
继承extend
只能单继承、Ctrl+H(继承树)
final常量不能被继承
子类继承了父类,就会拥有父类的全部方法(私有的东西无法被继承)
所有的类,都默认直接or间接继承object类
1⃣️super注意点:
1.super调用父类的构造方法,必须在构造方法第一个
2.super必须只能出现在子类的方法or构造方法中
3.super和this不能同时调用构造方法
【super.属性】父类的
默认调用父类的无参构造super.xxx
2⃣️this注意点:
1.代表的对象不同:
this:本身调用者(类)的这个对象
super:代表父类对象的应用
2.前提:
this:没有继承也可以使用
super:只能在继承条件才可以使用
3.构造方法:
this();本类的构造
super();父类的构造
3⃣️方法的重写:
需要有继承关系,子类重写父类的方法
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可扩大不可缩小:pub>pro>def>private
4.抛出异常:范围可缩小不可扩大
父类的引用可以指向子类 -
多态
·同一个方法可以根据发送对象的不同而采用多种不同的行为方式
·一个对象的实际类型是确定的,可以指向的引用类型有很多(父类,有关系的类)
(父类的引用可以指向子类
Son s1 = new Son();
Father s2 = new Son();
·对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
子类:能调用自己的方法or继承父类的
父类:可以指向子类,不能调用子类
—————
1.方法的多态,属性没有多态
2.父类和子类有联系才可转化、类型转换异常
3.存在条件:继承关系,方法需要重写,父类引用指向子类对象
—————
instanceof判断是否是某种类型,有继承关系true,无false
类型之间的转换:父(高) —— 子(低)
子类转化为父类,可能丢失一些自己的方法
低—>高:可随意
高—>低:需强制转型:((类型)对象)
1.父类引用指向子类对象
2.把子类转化为父类,向上转型
3.把父类转化为子类,向下转型:强势转换
4.方便方法的调用
执行顺序:1.静态代码块static(只执行一次) 2.匿名代码块(可赋初始值) 3.构造方法 -
抽象类abstract
1.抽象类只有方法名字,没有方法的实现
2.继承了抽象类的类,必须实现抽象类的方法,除非也是abstract
3.不能new,只能靠子类去实现它
4.抽象类中可以写普通方法
5.抽象方法必须在抽象类中 -
接口interface、实现implement(s)
只有规范(定义一组规则),接口的本质是契约,如法律大家都要遵循,自己无法写方法,约束和实现分离,面向接口编程
接口可以多继承
类可以实现接口,必须重写接口的类
1.接口中所有定义都是public abstract
2.常量public static final