html5网站建设源码,wordpress没有upload,做单页网站容易排名吗,网站建设的售后多态语法详解 一#xff1a;概念1#xff1a;多态实现条件 二:重写#xff1a;三#xff1a;向上转型和向下转型1:向上转型#xff1a;1#xff1a;直接赋值#xff1a;2#xff1a;方法传参3#xff1a;返回值 2:向下转型 一#xff1a;概念
1#xff1a;同一个引… 多态语法详解 一概念1多态实现条件 二:重写三向上转型和向下转型1:向上转型1直接赋值2方法传参3返回值 2:向下转型 一概念
1同一个引用调用了同一个方法因为引用的对象不一样所表现出来的行为也不一样。
1多态实现条件
1必须在继承体系下 2子类必须对父类中的方法进行重写 3通过父类引用调用重写的方法
二:重写
重写也称覆盖。重写是子类对父类非静态非private,非final修饰非构造方法等的实现过程进行重新编写。 重写规则 1:方法名参数列表参数类型个数顺序返回类型都要相同返回类型可以构成父子类关系。 2子类重写父类同名的方法时子类方法的访问权限要大于父类的。 3当在父类的构造方法中调用了子类和父类同名的方法时此时会调用子类的方法。 提醒 不要在构造方法中调用重写的方法。
class Person{public String name;public int age;public Person(String name, int age) {this.name name;this.age age;fun();}public void fun(){System.out.println(父类的fun()方法);}
}
class Student extends Person{public Student(String name, int age) {super(name, age);}public void fun(){System.out.println(子类的fun()方法);}
}
public class Test {public static void main(String[] args) {Student studentnew Student(张三,20);}
}4父类方法被static ,final,private修饰不能重写
三向上转型和向下转型
1:向上转型
子类对象给到了父类对象也可以理解为父类引用引用的是子类对象通过父类的引用去调用父类和子类同名的方法不过调用的是子类的方法。也叫作动态绑定
1直接赋值
class Animal{private String name;private int age;public Animal(String name, int age) {this.name name;this.age age;}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;}public void eat(){System.out.println(this.age在吃饭);}
}
class Dog extends Animal{public Dog(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(this.getName()吃狗粮);}
}
public class Test {public static void main(String[] args) {Animal animalnew Dog(旺财,3);//父类引用引用了子类对象animal.eat();//通过父类引用访问了和父类同名的子类方法}
} 2方法传参
class Animal{private String name;private int age;public Animal(String name, int age) {this.name name;this.age age;}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;}public void eat(){System.out.println(this.age在吃饭);}
}
class Dog extends Animal{public Dog(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(this.getName()吃狗粮);}
}
class Cat extends Animal{public Cat(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(this.getName()吃猫粮);}
}
public class Test {public static void fun(Animal animal){animal.eat();//同一个引用引用了同一个方法因为引用的对象不一样所表现出来的行为不一样我们把这种思想叫做多态}public static void main(String[] args) {Dog dognew Dog(旺财,3);fun(dog);fun(new Cat(喵喵,2));}
} 3返回值
作返回值返回任意子类对象
class Animal{private String name;private int age;public Animal(String name, int age) {this.name name;this.age age;}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;}public void eat(){System.out.println(this.age在吃饭);}
}
class Dog extends Animal{public Dog(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(this.getName()吃狗粮);}
}
class Cat extends Animal{public Cat(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(this.getName()吃猫粮);}
}
public class Test {public static Animal fun(){return new Dog(旺财,3);}public static void main(String[] args) {Animal animalfun();animal.eat();}
}
2:向下转型
将一个子类对象经过向上转型后当成父类方法使用再也无法调用子类特有的方法
class Animal{private String name;private int age;public Animal(String name, int age) {this.name name;this.age age;}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;}public void eat(){System.out.println(this.age在吃饭);}
}
class Dog extends Animal{public Dog(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(this.getName()吃狗粮);}
}
class Cat extends Animal{public Cat(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(this.getName()吃猫粮);}public void barks(){System.out.println(this.getName()摇尾巴);}
}
public class Test {public static void main(String[] args) {Animal animal new Dog(旺财,3);animal.barks();}
} 但有时需要调用子类特有的方法此时:将父类引用在还原为子类对象也就是向下转型。
class Animal{private String name;private int age;public Animal(String name, int age) {this.name name;this.age age;}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;}public void eat(){System.out.println(this.age在吃饭);}
}
class Dog extends Animal{public Dog(String name, int age) {super(name, age);}public void barks(){System.out.println(this.getName()摇尾巴);}Overridepublic void eat() {System.out.println(this.getName()吃狗粮);}
}
class Cat extends Animal{public Cat(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(this.getName()吃猫粮);}}
public class Test {public static void main(String[] args) {Dog dognew Dog(旺财 ,2);Animal animal dog;dog**(Dog)** animal;dog.barks();}
}
向下转型用的比较少而且不完全万一转换失败运行时就会抛出异常Java中为了提高向下转型的安全性引入了instance,如果表达式为true,则可以安全转换。
class Animal{private String name;private int age;public Animal(String name, int age) {this.name name;this.age age;}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;}public void eat(){System.out.println(this.age在吃饭);}
}
class Dog extends Animal{public Dog(String name, int age) {super(name, age);}public void barks(){System.out.println(this.getName()摇尾巴);}Overridepublic void eat() {System.out.println(this.getName()吃狗粮);}
}
class Cat extends Animal{public Cat(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(this.getName()吃猫粮);}}
public class Test {public static void main(String[] args) {Animal animal new Dog(旺财, 3);if (animal instanceof Dog) {Dog dog (Dog) animal;((Dog) animal).barks();}}
}