1.成员变量和局部变量
当局部变量和成员变量重名时,方法中会根据“就近原则”使用局部变量的值,如果要区分的话,可以使用this关键字。
格式:this.成员变量名
this关键字的作用:
1.this可以修饰属性、方法、构造方法
2.this可以理解为当前使用的对或者正在创建的对象,通过哪个对象调用的方法谁就是this
3.可以在构造方法中通过”this(形参)“的方式调用本类中其他重载的构造方法(注意:在构造方法内部必须写在首行)
2.构造方法
在我们使用类的时候,会使用一个特殊的方法,叫构造方法,也叫构造器。
构造方法就是专门创建对象的方法,当我们在new的时候其实就是调用构造方法。
如何创建构造方法呢?
public 构造方法名(参数){
}
注意:
1.构造方法不能写返回值
2.构造方法名必须和当前的类名一模一样,大小写都得一样。
构造方法也可以重载。
构造方法的作用:
1.定义无参构造方法,可以new对象
2.定义有参构造方法,可以在new对象的同时给属性赋值
注意:
如果类中没有定义构造方法,系统会自动给我们提供一个无参的构造方法;
如果类中自己定义了有参构造方法,它会把系统提供的无参构造方法覆盖掉,需要手动再提供一个无参构造方法。
3.面向对象的第一大特征:封装性
当创建完对象以后,如果直接通过"对象名.属性名"的方式去对属性赋值的话,可能会出现一些不合实际情况的问题,例如要求对年龄进行赋值,直接this.age=-1,会出现一些不合实际的问题,因为年龄不可能是负数。
那应该怎么办呢?
可以通过”对象名.方法名“的方式赋值,因为我们可以在方法里面加大量的业务逻辑对属性值进行限制。
使用封装:
1.将属性私有化
2.提供公用的(getting setting)方法实现调用和赋值
4.面向对象第二大特征:继承性
1.继承就是允许子类拥有父类的属性和行为
优点:提高代码的复用性;缺点:耦合度更高了。
2.继承语法
class 子类名 extends 父类{
}
①子类继承父类以后,父类声明的所有属性和方法都可以获取到
②子类除了通过继承获取父类属性和方法外,还可以定义自己独有的方法和属性
③java继承是单继承,一个类只能继承一个父类,一个父类可以有多个子类。
super关键字
super关键字可以修饰属性、方法、构造方法。
(1)当子类和父类属性名时,可以通过”super.属性名“调用父类中声明的属性。如果想调用子类同名的属性可以使用”this.属性名“
(2)子类重写父类方法后,如果子类想再次调用父类被重写的方法,可以使用”super.方法名()“调用。
(3)super修饰构造方法,通过在子类构造方法中使用”super(形参)“来显示调用父类构造方法
5.面向对象第三大特征:多态
什么是多态?
多态指的是一个对象的多种形态,使用多态前提是要有继承和接口的实现。
1.方法的重载和重写就是一种多态
2.子类对象的一种多态性
Pet p1=new Dog("泰迪","小迪");
1)父类的引用指向的是子类的实例
2)在执行时,调用的是子类的方法,在编译时,调用的是父类的方法
3)编译时看左边,运行时看右边
6.访问修饰符
访问修饰符可以修饰方法、属性、类、接口。
访问修饰符一共有四种:
1.private:只能在当前类中调用
2.缺省:在同一个包中可以调用
3.protected:受保护的,在同一个包中可以调用
4.public:公共的,在同一个项目下都可以调用
7.方法重写
如果父类方法满足不了子类要求,子类可以重写父类方法。
重写规则:
(1)子类方法必须和父类的方法名、返回值类型,参数列表一致
(2)子类的访问修饰符权限不能小于父类的访问修饰符权限
(3)子类方法和父类方法必须同为static或者非static
8.final关键字
final关键字可以修饰类、方法、成员变量、局部变量。
final修饰类时,这个类不能被继承,但是可以继承别的类。
final修饰方法,这个方法是一个最终方法,不能被重写。
final修饰成员变量,成员变量的值不可改变。
fina修饰局部变量,值不能改变。