学了面向对象中的封装、继承、多态,来进入代码演练一番吧~
package p1;
public class TestAnimal {
public static void main(String[] args) {
//多态:父类型的引用存储子类型的对象.
// 父类 Animal 子类 Dog
Animal a1=new Dog("柯基",3);
System.out.println("狗狗的信息:"+a1.getName()+"-"+a1.getAge());
// 父类 Animal 子类 Cate
Animal a2=new Cat("虎斑",3);
System.out.println("猫猫的信息:"+a2.getName()+"-"+a2.getAge());
}
}
//父类 动物
class Animal{
//封装 属性私有化
private String name;
private int age;
//提供无参构造方法
public Animal(){}
//提供有参构造方法
public Animal(String name,int age){
this.name=name;
this.age=age;
}
//set 设置/ get 获取
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//子类 狗 --- 继承父类 动物
class Dog extends Animal{
//提供无参构造方法
public Dog() {}
//提供有参构造方法
public Dog(String name, int age) {
super(name, age);
}
}
//子类 猫 --- 继承父类 动物
class Cat extends Animal{
//提供无参构造方法
public Cat() {}
//提供有参构造方法
public Cat(String name, int age) {
super(name, age);
}
}
super的应用?
super应用在子类中使用父类中内容.
super.
a. super. 应用在子类中的构造方法或是成员方法中,代表访问父类中的属性或是成员方法
b. super.属性名 访问父类中属性
super.方法名(实参); 访问父类中成员方法
c. super.应用场景:当子类和父类定义了重名的属性或是成员方法时;
需要在子类中访问和父类重名内容,则需要利用 super. 区分 父类的属性和方法
注意:
创建每一个子类对象,jvm默认为每一个子类对象创建对应的一个父类对象
super()
a. super()/super(实参);
应用在子类的构造方法的第一行语句,代表创建子类对象时;
告知jvm为子类对象创建对应父类对象时利用父类的哪一个构造方法完成对象的创建
b. super():代表利用父类无参数的构造方法
super(实参):代表利用父类有参数的构造方法
c. 注意:super()必须使用在子类构造法的第一行语句
d. 如果子类的构造方法第一行没有指定super()/super(实参),则默认在第一行添加super()
Jvm默认添加:
super():子类构造方法第一行没有指定super()/super(实参),jvm默认添加
this. 访问属性,如果成员变量和局部变量没有冲突时,直接利用 属性名访问成员时,默认 this.属性名
当一个类中没有定义任何构造方法,jvm默认添加公开的无参数的构造方法
super的案例:
// 父类
class A{
public A(int n){
System.out.println("A(int n)");
}
}
// 子类
class B extends A{
public B(){
super();
System.out.println("B()....");
}
public B(int n){
super(n);
System.out.println("B(int n)...子类有参数构造");
}
}
分析:
编译报错,错误原因在子类无参的构造方法第一行super()/super(实参)的应用;
Jvm默认在第一行添加super(),需要利用父类无参数的构造方法完成父类对象;
但是父类中只提供了有参数的构造方法,没有无参数的构造方法,编译报错。
super和this的区别:
super访问->代表父类对象,父类的属性、成员方法、构造方法
super. : 应用在子类的构造方法或是成员方法中,访问父类的属性或是成员方法
super(): 应用在子类的构造方法,代表 告知jvm创建父类对象利用父类的哪一个构造方法完成对象
this访问->代表当前对象,自身的属性、成员方法、构造方法
this. :应用在本类的构造方法或是成员方法中,访问当前对象属性或是成员方法
this(): 应用在本类的构造方法,访问本类的其他构造方法