学习总结1
目前学习Java也已经有半个月了,对编程思想也有更清晰的认识了。在我看来,知识是在不断总结的过程中慢慢积累的,因为我们在总结的过程中不仅可以回顾学过的知识点,还能够发现我们学得不好的地方,进行查漏补缺。本文主要分享一些这段时间学习的总结。上一周主要学习了面向对象语言,因此接下来就主要对面向对象方面的内容进行一些简单的总结,如果有不恰当或者错误的地方,希望各位大佬指出,感激不尽。
面向对象思想
在我们的生活中,我们每个人都会做一些事,比如买菜、做饭、洗碗等等,这些都需要我们自己去完成。然而很多人不愿意自己去做,那么有的人他就会选择请一个保姆来做这些,那现在我们就只要命令保姆每天给我们买菜、做饭、洗碗就可以了,这就是我们编程中所说的面向对象思想,我们在编写程序时就需要以面向对象的思想来实现,这是非常重要的。
- 面向对象是相对于面向过程而言的,指的是把相关的数据和方法组织为一个整体来看待。
- 面向过程关注的是执行的过程,而面向对象关注的是具备功能的对象。
- 对象对象到面向过程的转变,是程序员思想从执行者到指挥者的转变。
一、类与对象
-
类:是共性的产物,是一个综合的特征。
-
对象:个性的产物,是一个个体的特征
-
类与对象的关系:
类通过对象才可以使用,对象所有操作通过类定义。 -
类由属性和方法组成
类的定义格式:
class 类名称{
成员属性 //数据类型 属性名;
成员方法
/*修饰符+返回值类型+方法名(形式参数列表){
方法体;
return 返回值;
}
*/
}
需要注意的是:
类必须编写在 .Java文件中;
.Java文件中只能有一个public修饰的类;
.Java文件名称必须与public修饰的类名完全一致;
同一个包中类的命名不能重复。
- 对象的定义格式:
类名称 对象名称 = new 类名称();
//给对象属性赋值:
对象名称.属性名 = 值;
//调用类中的方法:
对象名.方法名();
//需要注意的是:
Book b1 = new Book();
Book b2 = b1;
//此时b1和b2是同一个对象,当其中一个对象发生变化时,两个都会发生变化。
- 构造方法(构造器):用于对象初始化,方法名称与类名相同,没有返回值类型声明。
如果一个类中没有明确的编写构造方法,则编译器会自动生成一个无参的构造方法,构造方法中没有任何代码。
例:
public person(){
System.out.println();
}
二、面向对象的三大特征
- 封装性
用private来修饰,是为了保护或者防止代码被无意破坏,不让类以外的程序直接访问和修改。
主要是通过隐藏对象的属性和实现细节,仅对外公开访问方法,并且控制访问级别。
我们在编写代码时建议对所有的属性进行封装,并且引入getter/setter方法,允许外部通过调用
getter/setter方法访问成员属性。 - 继承性
继承是指在一个现有类(父类)的基础上在构建一个新类(子类),子类继承父类的特征和行为,即拥有和父类一样的属性和方法,可以调用.通过继承就可以避免大量的重复代码。
格式:
class 子类 extends 父类{
}
需要注意的是:Java中只有单继承、多重继承,没有多继承。
- 多态性
是一种对象的多种表现形态,方法的重载和重写也是多态的一种.
比如说护士和学生,他们都属于人的一种,因此护士和学生就是人的不同表现形式,体现了人的多态.
多态的使用:对象的类型转换
子类实例->父类实例
格式:父类 父类对象 = 子类对象;
父类实例->子类实例
格式:子类 子类对象 = (子类)父类实例;
注意不同形态之间不能相互转换,比如说护士就不能转换为学生。
三、重载(overload)与重写(override)是什么?他们有什么区别?
- Overload:重载,表示在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同(或参数顺序不同)即可,与返回值无关
- Override:重写,对父类方法进行重写,参数类型必须相同,在子父类中实现.
- 区别:
四、抽象类与接口
1.抽象类
- 抽象类必须用abstract声明,在一个抽象类中可以有抽象方法也可以有非抽象方法。
- 抽象方法是指: 只声明未实现的方法(没有{}方法体)
格式:
abstract class 类名{
public abstract void 方法名();
}
—注意:
抽象类不能直接被实例化,即不能直接通过new关键字完成。
抽象类必须被子类所继承,所继承的子类(不是抽象类)则必须重写抽象类中的全部抽象方法,否者子类也必须用abstract声明是抽象类。
—常见问题:
抽象类不能使用final声明,因为final修饰的类不能有子类,而抽象类必须被子类继承才有意义。
2.接口
- 类中的全部方法都是抽象方法,全部属性都是全局常量,那么就将这个类定义为一个接口。
格式:
interface 接口名称{
全局常量;可以简写为 数据类型 常量名 = 值;
抽象方法;可以简写为 返回值类型 方法名();
}
- 与抽象类类似,都需要依靠子类,不过接口是通过子类来实现,允许多实现,并且接口在继承时允许多继承。
格式:
class 子类 implement 父接口1、父接口2{
}
//接口的继承
interface C extends A,B{
}
3.抽象类与接口的区别
五、可变参数
- 可以传入任意个数的参数
格式:
pubLic static int sum(int...nums){
}
- 可变参数只能出现在参数列表的最后。