Java------子类、父类继承、静态方法等等

Java------子类、父类继承、静态方法等等

纸上得来终觉浅
父类:

public class dogs {
    
    
    private Integer id;
    private String name;
    public void  call(){
    
    
        System.out.println("dogs.....dogs.......dogs.....dogs.....dogs....dogs....");
    }

    public Integer getId() {
    
    
        return id;
    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }
}

子类:

public class dog extends dogs{
    
    
    private Integer id;
    public void  call(){
    
    
        System.out.println("dog..dog....dog....dog..dog.....dog....dog.........");
    }
    public Integer getId() {
    
    
        return id;
    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }
}

测试:

public class Test {
    
    
    public static void main(String[] arge) {
    
    
        dog dog = new dog();
        dog.setId(1);
        dog.setName("哈哈");
        System.out.println(dog.getId()+".........."+dog.getName());
        dog.call();  //输出结果:dog..dog....dog....dog..dog.....dog....dog.........
        dogs dogs = new dog();
        dogs.call();  //输出结果:dog..dog....dog....dog..dog.....dog....dog.........
    }
}

这是最基础的案例:子类继承父类的方法,以及属性。
上述案例中:父类具有一个私有name,但是有共有的getName,setName方法。子类dog并没有name属性,但是通过使用setName、getName方法给子类dog给它个Name。

疑问:如果没有getName方法,setName方法,子类能否获取父类的name?

		dog dog = new dog();
        dog.setId(1);
        System.out.println(dog.getId()+".........."+dog.name);

答案是不能的。
当把getName、setName方法改为private时,dog也是无法调用这些方法。
也就是子类并不能继承父类私有的属性或方法。但是子类的对象是包括子类所不能从父类中继承的私有成员的。因为我们能够通过public getName给子类dog添加上父类的私有属性。

疑问:子类能否重写父类的静态方法?

将父类和子类中的call方法都改为静态方法。

		Dog dog = new dog();
        dog.call(); //dog..dog....dog....dog..dog.....dog....dog.........

		Dogs dogs = new dog();
        dogs.call();//dogs.....dogs.......dogs.....dogs.....dogs....dogs....
        //此时和通过类名.方法名调用的结果一样,也就是子类并没有重写父类的方法名

由此可见,子类并不能够重写父类的静态方法,
Dogs dogs = new dog();
dogs在调用普通方法时,执行的子类方法,在调用静态方法是,则执行父类方法。
在运行时期,将根据dogs 这个对象引用实际的类型来获取对应的方法。所以才有多态性。一个基类的对象引用,被赋予不同的子类对象引用,执行该方法时,将表现出不同的行为。

Guess you like

Origin blog.csdn.net/cz_chen_zhuo/article/details/117476554