对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
类:类是一个模板,它描述一类对象的行为和状态。
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。
一个类可以拥有多个方法,在上面的例子中:eat()、run()、sleep() 和 name() 都是 Dog 类的方法。
构造方法
每个类都有构造方法。没有定义构造方法,会提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。
构造方法的名称必须与类同名,一个类可以有多个构造方法。
publicclassPuppy{
publicPuppy(){
}
publicPuppy(Stringname){
//这个构造器仅有一个参数:name
}
}
创建对象
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字 new 来创建一个对象。
- 初始化:使用 new 创建对象时,会调用构造方法初始化对象。
public class Puppy{
public Puppy(String name){
//这个构造器仅有一个参数:name
System.out.println("小狗的名字是:"+name);
}
public static void main(String[] args){
//下面的语句将创建一个Puppy对象
Puppy myPuppy=new Puppy("tommy");
}
}
面向对象特征(特性)
封装、继承、多态
封装:隐藏类中的细节(属性方法),不能让其他类随意的访问
通过四个访问权限修饰符来达到封装效果
public | 公共的 |
protected | 受保护的(家族性的) |
default默认 | (本包中) |
private私有的 | (本类中) |
getter | setter | java bean 属性 封装 |
public String getSex(){
return sex;
}
public void setSex(String sex){
this.sex=sex;
}
继承 一个子类可以继承父类,子类就具有父类中定义好的属性和方法
不是所有的属性和方法都能访问到public protected 本包下的父类 default
- 1、实现了代码重用
- 2、多态实现的基础
注意:
- 1、一个子类只能有一个父类
- 2、Java支持多重继承
class Animal{
void eat(){
System.out.println("animal : eat");
}
}
class Dog extends Animal{ //extends 子类继承父类
void eat(){
System.out.println("dog:eat");
}
void eatTest(){
this.eat();//this调用自己的方法
super.eat();//super调用父类方法
}
}
子类继承父类
方法重写:子类对父类中继承过来的方法重新定义
可以使用@Override注解,来验证方法是否是重写的方法
注意:返回值、方法名、参数列表 不能发生变化
重写的方法访问权限只能更加开放不能更闭塞
@Override
public void fly(){
System.out.println("看,天上有个大飞机");
}
子父类间的构造方法
子类的构造方法中首行必须要用父类的构造方法
默认调用父类无参构造方法
父类中没有无参构造方法子类构造方法中必须明文声明调用父类哪一个构造方法
使用super关键字调用父类的构造方法
super(code);
向上转型
调用的方法看对象Plane中的方法
P p=new P(); |
|
p.fly(): | //P中的方法 |
P l=new Plane(); |
|
l.fly(); | //Plane继承P中的方法 |
Plane pl=new BigPlane(); |
|
pl.fly(); | //BignePlane中的重写父类的方法 |
调用属性看变量的声明
多态:调用方法时可能会出现多种结果
多态分类:
静态多态:重载造成的,在类编译时就可以确定调用的是哪一个方法
动态多态:重写造成的,只有在直行到该行代码,才能确定执行的是那个类中的方法
this 与 super 的区别
共同点:
- 用于引用对象:this 和 super 都是用于引用对象的关键字。
- 在构造函数中调用: 两者通常在构造函数中使用。this 用于调用同一类中的其他构造函数,而 super 用于调用父类的构造函数。
不同点:
引用对象的范围不同:
- this 引用的是当前对象的实例。
- super 引用的是父类的实例。
用途不同:
- this 主要用于处理同一类中的字段、方法或构造函数之间的引用,以区分成员变量和局部变量,或者在构造函数中调用其他构造函数。
- super 主要用于在子类中调用父类的字段、方法或构造函数。在子类中,可以使用 super 关键字访问父类的成员。
语法不同:
- this 可以出现在方法、构造函数和代码块中,并且可以用于调用其他构造函数、访问实例变量等。例如,this.method() 或者 this.variable。
- super 主要用于在子类中访问父类的成员,例如,super.method() 或者 super.variable。
总的来说,this 和 super 在引用对象的范围、用途和语法上有一些共同点,但它们主要是用于不同的场景,分别处理同类中和父子类中的对象引用。