定义:把客观的事物封装成抽象的类、并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
作用:
- 尽可能地隐藏对象的内部实现细节、控制用户对类的修改和访问权限
- 提到代码的可维护性。
- 可进行数据检查、有利于保证对象信息的完整性。
定义:继承就是由已经存在的类创建新类的机制、在已经存在的类的基础上扩展功能。
作用:在一组类似的对象中、抽取出共性的特征(属性)和行为(方法)、实现重用、提高代码复用。
多态定义:多态是指父类的方法被子类重写时、可以各自产生自己的功能行为。
作用:
- 灵活、降低耦合度。
- 屏蔽子类之间的差异。
-
现实生活是由很多很多对象组成的,基于对象抽出了类
-
对象:软件中真实存在的单个个体/东西
类:类型/类别,代表一类个体
-
类是对象的模板,对象是类的具体的实例
-
类中可以包含:
-
对象的属性/特征-----------------------------成员变量
-
对象的行为/动作/功能---------------------方法
-
-
一个类可以创建多个对象
//创建类:
public class Student {
//成员变量
String name;
int age;
String address;
//方法
void study(){
System.out.println(name+"在学习...");
}
void sayHi(){
System.out.println("大家好,我叫"+name+",今年"+age+"岁了,家住"+address);
}
}
//创建对象:
public class StudentTest {
public static void main(String[] args) {
//创建一个学生对象
Student zs = new Student();
//访问成员变量
zs.name = "zhangsan";
zs.age = 25;
zs.address = "河北廊坊";
//调用方法
zs.study();
zs.sayHi();
//1)创建了一个学生对象
//2)给所有成员变量赋默认值
Student ww = new Student();
ww.study();
ww.sayHi();
}
}
3.方法的重载
发生在同一类中,方法名相同,参数列表不同
//演示方法的重载
class Aoo{
void show(){}
void show(String name){}
void show(int age){}
void show(String name,int age){}
void show(int age,String name){}
//int show(){ return 1; } //编译错误,重载与返回值类型无关
//void show(String address){} //编译错误,重载与参数名称无关
}
4.构造方法
-
作用:给成员变量赋初始值
-
与类同名,没有返回值类型(连void都没有)
-
在创建(new)对象时被自动调用
-
若自己不写构造方法,则编译器默认提供一个无参构造方法,
若自己写了构造方法,则不再默认提供
-
构造方法可以重载
this:指代当前对象,哪个对象调用方法它指的就是哪个对象
只能用在方法中,方法中访问成员变量之前默认有个this.
this的用法:
-
this.成员变量名--------------访问成员变量
当成员变量和局部变量同名时,若想访问成员变量则this不能省略,其它一般省略 ,一般来说成员变量是指向类的,而局部变量则是在方法中定义的变量
class Student {
//成员变量
String name;
int age;
String address;
//构造方法
Student(String name,int age,String address){
this.name = name; //zs.name="zhangsan"
this.age = age; //zs.age=25
this.address = address; //zs.address="LF"
}
5.继承
-
作用:代码复用
-
通过extends来实现继承
-
超类/父类:共有的属性和行为
派生类/子类:特有的属性和行为
-
派生类可以访问:派生类的+超类的,而超类不能访问派生类的
-
一个超类可以有多个派生类,但一个派生类只能继承一个超类-----单一继承
-
具有传递性
super的用法:
-
super.成员变量名------------------------访问超类的成员变量(一般不用,了解)
-
super.方法名()----------------------------调用超类的方法
-
super()--------------------------------------调用超类的构造方法
public class SuperDemo {
public static void main(String[] args) {
Boo o = new Boo();
}
}
class Aoo{
Aoo(){
System.out.println("超类构造...");
}
}
class Boo extends Aoo{
Boo(){
//super(); //默认的,写不写都在
System.out.println("派生类构造...");
}
}
class Coo{
Coo(int a){
}
}
class Doo extends Coo{
Doo(){
super(5); //调用超类的有参构造
}
}
5.2向上造型
超类型的引用指向派生类的对象
public class UploadDemo {
public static void main(String[] args) {
Aoo o1 = new Aoo();
o1.a = 1;
o1.show();
//o1.b = 2; //编译错误,超类不能访问派生类的
//o2.test(); //编译错误
Boo o2 = new Boo();
o2.b = 1;
o2.test();
o2.a = 2; //正确,派生类可以访问超类的
o2.show(); //正确
//new出来Aoo类型的对象,不能访问派生类
Aoo o3 = new Boo(); //向上造型
o3.a = 1;
o3.show();
//o3.b = 2; //编译错误,能点出来什么,看引用的类型
//o3.test(); //编译错误
}
}
class Aoo{
int a;
void show(){
}
}
class Boo extends Aoo{
int b;
void test(){
}
}
向上造型采用的是父类对象调用子类方法的的思想,当有多个子类继承自一个父类时,如果需要调用多个子类的方法,只需要使用向上造型new对象,调用子类重写的父类方法.向上造型的主要思想是多态
方法的重写(override/overriding):重新写
-
发生在父子类中,方法名相同,参数列表相同------派生类中重写了超类的方法
-
重写方法被调用时,看对象的类型



