-
一:类的成员构造方法:
- 方式1:父类中提供无参构造方法
- 方式2:通过子类中的super(“..”),访问父类中的有参构造
- 方式3:在本类中可以通过其他构造方法去访问父类中构造方法:this();
- 注:this()/super(“..”),书写的位置:第一句话:防止父类进行多次初始化! 成员方法
- 如果父类和子类中的成员方法名称不一致,分别调用!
- 子类和父类中的成员方法名称一致的情况:
- 先在子类中找,有就输出…;
- 如果在子类中找不到方法,在父类中找有没有这样的方法,父类中没有该方法,就报错!
1)子类中 构造方法,默认的访问父类中的无参构造方法;
2)父类中的无参构造没有提供,子类如何访问父类中的构造方法?
例如代码:
class Father{
public void show(){
System.out.println("show Father...");
}
}
class Son extends Father{ //子继承父类
public void method(){
System.out.println("show Method...");
}
/*
public void show(){
System.out.println("show Son...");
}*/
}
//测试类
public class ExtendsDemo {
public static void main(String[] args) {
//创建子类对象
Son s = new Son() ;
s.show(); //子类没有show方法,所以打印出父类的show方法
s.method(); //子类有method方法,所以打印出子类的method方法
// s.function();
}
}
-
二:方法重写:
-
问:子类为什么会出现方法重写?
答:子类出现了一样的方法声明,有时候可能子类会自己特有的功能,需要方法重写
子类出现了和父类一模一样的方法声明
**面试题:
问:方法重载和方法重写的区别?
overload:在同一个类中,方法名相同,参数列表不同(参数个数/参数类型),与返回值没有关系
override:子类的方法和父类的一模一样,连返回值都一样.
例如:
class Phone extends Object {
public void call(String name){
System.out.println("给"+name+"打电话");
}
}
class NewPhone extends Phone{
@Override //子类重写了父类中call()方法
public void call(String name){
System.out.println("给"+name+"打电话");
System.out.println("这个手机新增了打电话的功能...");
}
public void Music(){
super.call("邓超");
System.out.println("听音乐...");
}
}
//测试类
public class ExtendsDemo{
public static void main(String[] args) {
//创建子类对象
NewPhone np = new NewPhone() ;
np.call("邓超");
np.Music();
}
}
方法重写的注意事项:
1)如果父类的成员方法被private修饰,子类中的方法不能重写父类的私有的方法 2)子类要重写父类的方法,访问权限不能更低
- 子类和父类方法保持一致
3)如果父类中的成员方法是静态方法,子类重写父类中的这个方法,必须也是静态- (静态方法算不上方法重写;)规则:静态只能访问静态!
关于猫狗案例的继承版
* 猫狗案例继承版
* 具体分析:
* 猫:
成员变量:name,age,color
* 构造方法
* 成员方法:set()/get()。。
* 特有功能:玩毛线..
狗:
成员变量:name,age,color
* 构造方法:无参有参
* 成员方法:set()/get()…
* 特有功能:看门
- 猫和狗种的共性内容抽取为一个独立的类:
- 动物类:
成员变量:name,age,color
构造方法
成员方法:set()/get()。。狗继承动物类 猫继承动物类
代码:
class Animal extends Object{
//成员变量
private String name;
private int age;
private String color;
//无参构造
public Animal(){
super();
}
//有参构造
public Animal(String name,int age,String color){
this.name = name;
this.age = age;
this.color = color;
}
//提供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;
}
public String getColor(){
return color;
}
public void setColor(String color){
this.color = color;
}
public void sleep(){
System.out.println("累了就睡觉。。。");
}
}
//定义猫类
class Cat extends Animal{ //猫继承动物类
//无参构造
public Cat(){
super();
}
//有参构造
public Cat(String name,int age,String color){
super(name,age,color);
}
public void palyGame(){
System.out.println("猫玩毛线。。。");
}
}
//定义狗类
class Dog extends Animal{
public Dog(){
super();
}
public Dog(String name,int age,String color){
super(name,age,color);
}
public void lookDoor(){
System.out.println("狗会看门");
}
}
//测试类
public class ExtendsTest {
public static void main(String[] args) {
Cat c = new Cat();
c.setName("Tom");
c.setAge(5);
c.setColor("灰色");
System.out.println(c.getName()+"---"+c.getAge()+"---"+c.getColor());
//有参构造
Cat c2 = new Cat("hony",4,"黑色");
System.out.println(c2.getName()+"---"+c2.getAge()+"---"+c2.getColor());
}
}