1.面向对象的特点:继承、封装、多态
面向对象,将功能进行封装,强调具有功能的对象。
2.类与对象的关系:对象是类的实例化,是在堆内存中new出来的。
3.封装:隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
4.构造函数
5.This关键字
6.Static关键字
匿名调用;
1)当对象的方法仅调用一次时,可以使用匿名对象来来完成。这样比较简化。
如果一个对象进行多个成员调用,必须给这个对象起一个名字。
(一个类调用另一个类中的成员时,先new一个。)
new Car().run()
2)可以将匿名对象作为实际参数进行传递
show(new Car)
堆内存中的垃圾:只要没有引用指向这个对象,这个对象就是垃圾
封装
修饰符:private 私有化修饰符,只能被本类对象使用。
Public 被公有化的成员在所有类中都可以被访问。
Javabean:
class Student{
private String name;
private int age ;
char sex;
Public void setName(String name){
This.name = name;
}
Public void setAge(int age){
This.age = age;
}
Public String getName(){
Return name;
}
Public int getAge(){
Return age;
}
}
构造函数:对象被建立时运行一次,用于初始化
初始化代码块:是一对独立的大括号,用于初始化,优于构造函数执行。
This 关键字的用法(哪个对象调用this所在的函数,this就指向哪个对象。)
1)当局部变量与成员变量重名时,用this进行区分。
2)***在构造函数中,当构造函数重载时,一个构造函数调用另一个构造函数
This(name)this关键字加上参数,成员函数之间的调用可以直接调用。
3)**当定义一个功能时,对象还没有建立,这时用this代替,哪个对象调用this所在 的函数,this就指向哪个对象。
比较年龄的例子:
Public Boolean Compare(Person p ){
This.age == p.age
}
This用法注意:
This语句只能用在构造函数的第一句。
Static 静态修饰符
修饰成员变量(被static的成员在方法区中)
被static修饰的变量的特点:
1)随着类的加载而加载
2)优先于对象而存在
3)被所有对象所共享
4)可以用类名直接调用
静态的初始化代码块:当第一次使用该类或访问成员变量时,执行一次
静态初始化代码块只能访问静态成员变量,调用静态成员方法。
主要用法:
1)定义一个Const类,存储全局变量,里面包含若干static修饰的成员变量,被所有对象所共享。为了防止数据被修改,再加上final修饰符。
2)做一个计数器count,存储对象的数量 在默认构造器中(count++)。
**可以定义一个默认构造器,然后让其余构造器调用默认构造器。
继承 extends
继承的特点:单继承和多层继承
类与类之间的关系
1)继承 是关系 一般关系
2)关联关系 有一个多个的关系
3)组合关系 一个类由多个其他类组成
4)依赖关系 一般在类中不持有另一个类的引用,但在某些方法中需要另外类型的引用,这个类依赖参数类。
继承类的实例化过程:
当实例化一个一个子类时,先在堆内存中建立子类对象空间,包含父类的对象空间和子类的特有内容。
Super关键字
1)调用正确的父类构造器 父类没有默认构造器。(相对于子父类来说的,this是一个类的构造器间的调用)
2)当子类与父类出现同名时,用super来进行区分
3)子类调用父类的成员 super.num
访问修饰符
private
默认
Protected
public
函数的覆盖
子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写。
父类中的私有方法不可以被覆盖。
在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。
覆盖注意事项:
覆盖时,子类方法权限一定要大于等于父类方法权限
静态只能覆盖静态。
覆盖的应用:
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法, 这 样,即沿袭了父类的功能,又定义了子类特有的内容
Final 关键字
可以修饰类 成员函数 成员变量 变量
类 最终类,不可以被继承、
成员函数 最终函数,不能被覆盖
成员变量 拥有最终的值,只能被赋值一次
非static变量:只能被赋值一次,在声明的地方或构造函数中
抽象类 abstract
抽象就是从多个事物中将共性的,本质的内容抽取出来。
子类都需要重写父类的方法时,将这个方法定义为abstract
抽象类类不能被实例化,只能用来被继承
注意:一个类继承自一个抽象类时,必须要重写父类中所有的abstract方法,必须全部实现,如果不全部实现,那么这个类也必须是abstract类
抽象类包括 以实现的方法 和 抽象方法
接口 当一个类的方法全部是抽象方法时,这时可以把类定义为接口。
关键字interface
接口与类之间是实现关系。
接口的特点:
1)接口是对外暴露的规则
2)接口是程序功能的扩展
3)可以用来多实现
4)接口与类之间实现关系,在继承一个类的同时可以实现多个接口
5)接口与接口之间可以继承,接口可以多继承
接口中常量和方法的固定修饰符
常量:public stataic final int num = 3;
方法:public abstract void show();
固定的修饰符可以不写,系统会自动添加,所以在重写接口的方法时,前面一定要加上权限修饰符public。********************************
多态
代码体现:父类的引用指向了子类的对象空间。
优点:多态的出现大大提高了程序的扩展性。
缺点:只能使用父类的引用访问父类的成员。
多态的前提:
1)类与类之间必须有关系 ,继承 实现。
2)还有一个前提就是必须存在方法的重写。
Animal Cat Dog
Animal ani = new Cat();
Ani.run();
****访问子类特有的对象——>向下转型——>强制将父类的引用指向子类类型。
****Cat c = (Cat)ani
多态自始至终都是自己的子类对象在做着变化。
在向下转型时,必须判断是否指向正确的子类类型。
使用关键字 instanceof
If( ani instanceof Cat){
Cat c = (Cat)ani ;
c.eat();
}else if(ani instanceof Dog){
Dog d = (Dog)ani;
d. eat();
}
现在就可以在向下转型时,指向正确的子类类型。
ani 是——的实例。
在发生覆盖的情况下:
如果覆盖的是成员变量,访问父类的
如果覆盖的是成员函数,访问子类的。这和this的动态绑定有关,绑定到正在运行的对象上。
包
创建包:使用关键字package
package com.itcast,tools 编译时类文件在这个包中
编译:javac -d . ArrayTools.java
运行:java com.itcast.tools.ArrayTools
导入包:import com.itcast..tools.ArrayTools;
****一个包中的类要被访问,这个类必须定义为public,类公有后,方法也必须公有。
*****修饰类的两种权限修饰符
1)public 出包访问
2)默认 包内访问 |
|