文章目录
一、内容一
1、类和对象的基本概念
(1)类
类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
类的定义:
class 类名{
属性(变量);
行为(方法);
}
例如:定义一个Person类
class Person { // 类名称首字母大写
String name ;
int age ;
}
(2)对象
对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。
实例化对象:
类名称 对象名称 = new 类名称 () ;
例如:实例化一个Person 类的对象p:
Person p = new Person();
(3)类和对象的区别
类是对象的模板,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的。
2、Java的数据类型
3、对象大小
对象头+实例变量+内存填充(内存填充保证三者相加为8的倍数)
二、内容二
1、面向对象的三大基础特征
(1)封装
1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。
3.封装的基本要求是:把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的构造函数的话,那一定要写一个不带参的构造函数。在开发的时候经常要对已经编写的类进行测试,所以在有的时候还有重写toString方法,但这不是必须的。
举个例子: 你现在在用电脑(手机)看这篇文章,然而你在使用电脑(手机)的时候并不需要理解电脑(手机)内部是怎么样构成的,你只需要对点开浏览就可以了。
(2)继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
如:Man和Woman和Person:Man和Woman都属于Person,所以可以说Person是父类,Man和Woman从Person中继承了name和age等。
继承的声明是通过 extends 关键字声明,如下:
class 父类 {}
class 子类 extends 父类{ }
这里需要注意的是:
-
在Java中,只支持单继承,如果实现多继承的功能可以采用接口以及对内部类的使用。
-
子类拥有父类非private的属性,方法。(private是父类私有的)
-
子类可以拥有自己的属性和方法。(如上面例子中,鹰有“食肉”这个自己的属性等)
-
提高了类之间的关系(子类与父类之间)。对比封装的说明,封装似乎是降低类之间的关系,更加模块化,而继承带来无法避免的小缺点是提高了类之间的关系。
super关键字
说到继承,就一定要简单提下super关键字。
在子类中可以用super(),super.方法,super.变量名和对象名。
super():调用父类构造方法(构造方法在下文有介绍)。
super.方法名:直接访问并调用父类中的某个方法。
super.变量名和对象名:直接访问父类中的变量或对象。
重写和重载
重写:表示子类中的方法名、返回值、参数列表和父类当中的方法是一模一样
重载:表示两个方法方法名相同,参数列表不同(返回值不能作为重载的衡量标准)
重载和重写的区别和联系
1)重写发生在具有继承关系两个类之间的;重载既可以发生在具有继承关系的两个类
之间,也可以发生于同一个类当中
2)构造方法可以构成重载,但是不可以构成重写
3)子类重写父类的方法实现叫做重写;两个方法方法名相同,参数列表不同叫做重载
4) 静态方法可以被重载但是不能被重写,重写静态方法相当于隐藏父类中的方法
(3)多态
当一个类A有很多子类B,C,D时,并且子类都重写了父类中的某个方法func(),A a = new B,C,D(),
*这样的对象称之为向上转型对象,通过它调用func, 不同的向上转型对象就会在调用func时表现不同
的行为,这样就称之为多态。
Employee emp = new Manager();//向上转型
emp.countSalary(); //调用Manager中的countSalary
多态的三要素:
1)具有继承关系的两个类
2)重写
3)向上转型对象
多态的实现方式:
(1)基于继承实现的多态
基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。
(2)基于接口实现的多态
继承是通过重写父类的同一方法的几个不同子类来体现的,那么就可就是通过实现接口并覆盖接口中同一方法的几不同的类体现的。
在接口的多态中,指向接口的引用必须是指定这实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。
继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承多实现,它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务接口。所以它相对于继承来说有更好的灵活性。
三、练习
有一个DataBase类用于存储数据,有一个Man类,有一个Woman类,Man和
Woman都有共同的属性name、age等等,有共同的一些行为eat()/drink()
等等,衡量一个Man的标准和衡量一个Woman的标准是不一样的,看一个Man
看他的occupation、salary、trait等等,看一个Woman看她的eye、nose、
mouth、figure。需要注意在DataBase中需要提供一个list方法,列出所
存储对象的属性信息,不同的人群Man/Woman需要提供一个listSelf方法,
列出个人的属性信息,完成这个练习,体会继承和多态的应用
下面展示一些 内联代码片
。
class DataBase{
//存储数据
private ArrayList<People> list;
public DataBase(){
list=new ArrayList<>();
}
public void add(People p){
list.add(p);
}
public void List(){
for