匿名对象:
创建对象的语法:
创建对象的语法:
Person p1 = new Person();
//=左侧在做对象的声明,开辟的是栈内存
//=右侧,才是真正的创建对象
//结果:内存中,创建了一个对象,对象的地址,赋值给p1。
匿名对象,就是只有=右侧,没有=左侧。
new 构造方法(必要的参数);
匿名对象的用途:
1、使用匿名对象,直接调用类的方法。
2、匿名对象直接作为一个方法的参数。
注意点:
匿名对象只能使用一次。随着它的创建而使用一次。(一次性的)
优势:
1、使用后即销毁,就是被GC回收。
2、代码书写方法,提高效率。
new 构造方法();
就是没有名字的对象。随着被创建而使用一次。(一次性)。
new 构造方法().方法名();
new 构造方法().方法名();
一,封装
A:封装性:“打包”,
方法的封装。
类的封装。
属性:成员变量,给对象使用的。
对象.属性—>赋值,取值
对象.方法—>对象将方法调用
变量:直接写在类里:成员变量,描述这个类别的外部特征。使用变量
直接写在方法里:局部变量,存储数据。
如何对属性进行封装?访问权限修饰符:private default protected public
step1:使用private修饰属性
使用private修饰的成员变量,方法,都限制在本类内访问
step2:提供setter方法,用于给属性赋值
step3:提供getter方法,用于取值
属性的类型是boolean类型,isXXX(){}
二,继承
一个类B类,继承了另一个类A类。
A类:父类,基类,超类,SuperClass
B类:子类,派生类 ,SubClass
类的继承
- 关键字:extends,词义:扩展的。描述两个类的关系:子类,父类。
- 被继承的类:父类,根类,超类,基类,SuperClass
- 继承的类:子类,派生类,SubClass
继承的语法
public class FatherClass{
//属性
//方法
}
public class ChildClass extends FatherClass{
//新增的属性
//方法:重写,新增
}
多态性
父类:Animal
属性:name,age
方法:eat(),sleep()
子类:Cat
新增属性:color
新增方法:catchMouse()
重写方法:eat()
子类:Dog
新增方法:lookDoor()
重写方法:eat()
Animal a1 = new Animal();//a1能够访问的是父类的属性和父类的方法
Cat c1 = new Cat();//c1能够访问name,age,子类新增color。sleep(),子类重写eat,子类新增catchMouse()
Dog d1 = new Dog();//d1父类属性:name,age,方法:sleep(),子类重写eat(),子类新增lookDoor()
结论:对于子类对象,如果方法存在重写, 那么一定是调用重写之后的方法。
向上转型: 一个子类对象看成了父类类型。那么就失去了子类新增。
Animal a2 = new Cat();//
a2,本身是子类对象,但是看成父类类型。
那么能够访问父类的属性,不能访问子类的新增属性。
能够访问方法,以及子类重写的方法。
向下转型 格式:子类型 对象名 = (子类型)父类引用
动物类
public class Animal {
public void eat() {
System.out.println("动物吃东西");
}
}
猫类
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void playGame() {
System.out.println("猫捉迷藏");
}
}
测试类
public class AnimalDemo {
public static void main(String[] args) {
//多态
//向上转型
Animal a = new Cat();
a.eat();
// a.playGame();
//向下转型
Cat c = (Cat)a;
c.eat();
c.playGame();
}
}
重载,重写,this,super
向上转型和向下转型