练就是要在知晓原理的前提下,把它炼成自己的技能,做到随心而发,如果有一天,你想给人讲一个知识点,你可以很从容边敲边讲的时候,那就证明你练习的基本到位了。
悟就是要多多思考,思考书中说不能如何如何,试试看,找出不能的根本原因。多想想面向对象的思想到底是在说什么,多想想多态到底为什么要用,怎么用,这些都是初学者容易忽视的地方,等你都想明白了,我觉得,这才刚刚入java的门吧。
方法
方法:
可重复执行的代码块
基本结构:
修饰符 返回值类型 方法名(参数列表){
方法体;
}
修饰符: public(公共的),private(私有的),default(默认,不许要写),protected(受保护的),static(静态的),final(最终的),abstract(抽象的),,,,,
返回值类型: void(无返回值),数据类型 (包含基本数据类型,也包含引用数据类型)
方法名:符合标识符的命名规则
参数列表:有0个或者多个参数组成参数的组成部分是:
数据类型 参数名,数据类型 参数名,,,,
方法的分类:
无返回值,无参数
无返回值,有参数
有返回值,无参数
有返回值,有参数
类
将具有共同特征的事物统称为类
类的组成部分:
属性:事物的特征和特性,属于静态特点
格式:修饰符 数据类型 属性名;
方法:
事物的行为,动作,动态特点我们称之为方法
格式:修饰符 返回值类型 方法名(参数列表){
方法体;
}
构造方法:
作用:初始化类的信息
结构:访问修饰符 类名(参数列表){
}
访问修饰符指得是:private public protected default
注意:在加载类时,系统会默认提供一个无参的构造函数,在创建对象的时候会调用构造方法
当一个类中存在自定义的构造函数之后,系统将不再提供默认的无参构造
继承
继承是发生在父子类关系中的
继承的关键字 extends
继承的格式:public class 类名 extends 父类{}
继承的特点:
1.继承发生在父子类关系中
2.在java中继承是单继承的(一个类只能继承一个父类)
3.但是一个父类可以被多个子类继承
4.一个类继承了父类,那么它将拥有父类的所有属性和方法,私有属性和方法可以继承,但是不能使用
方法的覆盖(方法的重写):
a)在父子类继承关系中,当父类的方法不能满足子类的需求时,子类重写父类的非私有,非静态的同名方法,要求:方法名称相同,参数的个数,顺序,类型必须完全相同,返回值类型也要相同,子类的访问权限不能
b)小于父类;子类不能抛出比父类更多的异常但可以是父类异常的子异常
super 代表的超级的,父级的
在创建子类对象时,默认会先执行父类的无参构造,调用父类无参构造的方法:super(),调用父类有参构造:super(参数列表的值);当父类中不存在无参构造时,那么子类必须手动调用父类的有参构造
关键字讲解
一、Object
Object是所有类的父类,类在默认情况下,
继承的都是Object类
当我们直接输出一个对象名的时候:
会出现:当前类的路径+@+hashcode、
1.toString() 将对象转化成String类型,
在使用对象时,默认会调用toString()方法
a)toString得到的字符默认格式为:
当前类的路径+@+hashcode
b)若想要呢自己规定格式,那么我们需要重写toString();
2.equals()
比较基本数据类型时比较的是值是否相等,
比较引用数据类型时比较的是内存地址是否相等
equals()比较的是引用数据类型的值是否相等
在object中equals方法只是简单的使用==进行了比较,
若我们真的想要比较引用数据类型的值是否相等,那么我们就需要重写equals方法
3.finalize () 垃圾回收机制 只是用来进行垃圾回收
二、访问权限修饰符
权限修饰符 在本类中 在同包 不同包继承关系 任何位置
私有的private √ × × ×
默认(default) √ √ × ×
受保护的protected √ √ √ ×
公共的public √ √ √ √
访问权限从小到大的顺序为:private default protected public
三、this
this ,这 这个在代码中一般指的是当前对象,主要用来区分成员变量和局部变量
当变量名相同时,加this关键字的指的是全局变量,不加this关键字的是局部变量
this的用法:
调用当前类的属性:this.属性名;
调用当前类的方法:this.方法名();。。。。。此处的this是可以省略的
调用当前类的构造方法:this();…..当调用有参构造时,需要在()中添加参数
四、super
super指的是父级的,一般用来调用父类中的特性
super的用法:
调用父类中的属性:super.属性名;
调用父类中的方法:super.方法名();
调用父类中的构造方法:super();……当调用有参构造时,需要在()中添加参数。。。。。。。。。必须写在子类构造函数的第一行
五、final 最终的
1.final修饰的类不能被继承
2.final修饰的属性,值不能改变,是常量,必须赋初始值
3.final修饰的方法,不能被重写
4.不能修饰构造方法
六、static 静态
能修饰属性,也能修饰方法
使用static修饰的方法和属性,不属于对象,只属于类
调用静态属性:类名.属性名;
调用静态方法:类名.方法名();
abstract 抽象的
abstract 可以修饰方法
修饰的方法我们称为抽象方法;
修饰的方法没有方法体;
抽象方法只能存在于抽象类中
abstract 修饰类的抽象类
当一个类继承了抽象类,那么这个类就必须重写抽象类中的所有抽象方法
抽象类中可以有抽象方法,也可以有普通方法
抽象类不能被实例化(不能创建对象)
接口和抽象类
abstract 抽象的
abstract 可以修饰方法
修饰的方法我们称为抽象方法;
修饰的方法没有方法体;
抽象方法只能存在于抽象类中
abstract 修饰类的抽象类
当一个类继承了抽象类,那么这个类就必须重写抽象类中的所有抽象方法
抽象类中可以有抽象方法,也可以有普通方法
抽象类不能被实例化(不能创建对象)
接口interface
定义的格式:
public interface 接口名{}
接口是特殊的抽象类
接口中所有的方法都是抽象方法,
接口中所有的方法都是默认使用public abstract修饰的
接口中所有属性(变量)都是默认使用public static final修饰的,必须给定初始值
接口也不能被实例化
类与接口之间只能是实现的关系,即类实现接口
类实现了该接口,那么就必须重写接口中的所有方法
类是多实现的,即一个类可以实现多个接口,接口之间使用,分割
类是单继承,多实现的(一个类只能继承一个父类,但是可以实现多个接口)多态:(多种状态)
多态:(多种状态)
1.重载
在同一个类中,要求方法的名称相同,
参数的个数,顺序,类型至少有一个不同
2.重写,
在父子类继承关系中,父类无法满足子类的需求时,那么我们需要重写该方法,要求;方法的名称相同,参数相同(个数,顺序,类型),返回值相同;子类的访问权限不能小于父类;子类不能抛出比父类更多的异常,但可以是父类异常的子异常
3.实现类创建接口对象
接口的特点:
特殊的抽象类
所有的方法都是抽象的,公共的,默认的是public abstract
属性默认是public static final修饰的,必须赋初始值
接口与类之间的关系是类实现接口
一个类实现了该接口,那么必须重写该接口中的所有方法
一个类可以实现多个接口,但只能继承一个类
接口不能实例化
格式: 接口 对象名 = new 实现类(); 在这个对象中可以使用的方法只能是接口中含有的方法,
4.创建类的子类得到父类对象
抽象类的特点:抽象类的特点,
当一个类继承抽象类,那么这个类需要重写抽象类中的所有抽象方法,
抽象类中可以有普通方法,也可以有抽象方法
抽象方法的特点:抽象方法没有方法体,抽象方法只能存在于抽象类中
格式:父类 对象 = new 子类(); 可以通过new子类来使用父类中的方法
在这个对象中可以使用的方法,都是父类中的方法