javaSE继承随笔
继承
1.子类能够继承父类中的哪些成员
在任何情况下,子类可以继承父类中公开的(public 修饰) , 受保护的成员,在同一个包中,子类还能继承父类中使用默认修饰符修饰符的成员,因为构造方法不是类的成员,因此不能被继承
2.方法重写的规则
方法重写发生在具有继承关系的子类中,进行方法重写时,子类中重写的方法必须与父类中定义的方法具有相同的方法名和参数列表,返回值类型可以与父类中被重写的方法返回值类型一致,也可以是父类中被重写的方法的返回值类型的子类(协变返回类型),子类中重写方法的访问修饰符级别不能比父类中被重写的方法的修饰符级别低
3.super关键字的使用
a. super用来调用父类中的成员:主要是为了区分子类与父类有相同的成员
b. super用来调用父类的构造方法:必须是该构造方法中的第一条语句。
public class Father{
public Father(String name){
super();
this.name = name;
}
protected String name;
public void show(){
System.out.println("Father show");
}
}
public class Child extends Father{
public Child(String name){
super(name);
this.name = name;
}
private String name;
@Override
public void show(){
System.out.println("Child show");
}
public void test(){
this.show();//调用子类的方法
super.show(); //调用父类的方法
System.out.println(this.name);//打印子类中的name属性值
System.out.println(super.name);//打印父类中的name属性值
}
}
4. 万物皆对象的原理
当创建对象时会使用构造方法,而在构造方法中,子类是无条件调用父类的构造方法。而Object类是所有类的隐式父类,因此,一个对象的创建必须要经过Object类的构造方法才能创建成功,而Object本身 就表示对象的意思。因此,所有的类使用构造方法创建出来的都是对象。
5.练习
package animal;
/**
* 动物都有名称、年龄,都需要吃东西、睡觉。狗也是一种动物,也有名称和年龄,狗吃的是骨头,睡觉
* 时是趴着睡。马也是一种动物,也有名称和年龄,马吃的是草,睡觉时站着睡。
*/
public class Animal {
protected String name;
protected 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;
}
protected void eat() {
System.out.println("eat");
}
protected void sleep() {
System.out.println("sleep");
}
}
package animal;
public class Dog extends Animal{
public Dog(String name, int age){
super(name, age);
}
public void eat(){
System.out.println(age +"年的" + name +"eat bone");
}
public void sleep(){
System.out.println(age +"年的" + name +"sleeping face down");
}
}
package animal;
public class Horse extends Animal{
public Horse(String name, int age){
super(name, age);
}
public void eat(){
System.out.println(age +"年的" + name +"eat grass");
}
public void sleep(){
System.out.println(age +"年的" + name +"standing sleep");
}
}
package animal;
public class AnimalTest {
public static void main(String[] args) {
Animal a1 = new Dog("哈巴狗",9);
a1.eat();
a1.sleep();
Animal a2 = new Horse("良驹",5);
a2.eat();
a2.sleep();
}
}
package Worker;
/**
* 某公司员工有内部员工和临时工两种。不论是内部员工还是临时工,都具有姓名,员工编号,所属部
* 门,薪资。但临时工干的活都是一些较为粗重的,内部员工干的活都是一些较为轻松的。
*/
public class Worker {
protected String name;
protected String number;
protected String dept;
protected double salary;
public Worker(String name, String number, String dept, double salary) {
this.name = name;
this.number = number;
this.dept = dept;
this.salary = salary;
}
public void work() {
System.out.println("员工干活");
}
}
package Worker;
public class InnerWorker extends Worker {
public InnerWorker(String name , String number , String dept , double salary) {
super(name,number,dept,salary);
}
public void work() {
System.out.println("内部员工干轻松的活,但是薪资可能会低一点");
}
}
package Worker;
public class OutWorker extends Worker{
public OutWorker(String name , String number , String dept , double salary) {
super(name, number, dept , salary);
}
public void work() {
System.out.println("外包员工干一些又苦又累的活,但是工资会高一些");
}
}
package Worker;
public class WorkTest {
public static void main(String[] args) {
Worker w1 = new InnerWorker("张三" , "Xd001" , "财务部门" , 6000);
w1.work();
Worker w2 = new OutWorker("李四" , "Wb010" , "外务部门" , 15000);
w2.work();
}
}

浙公网安备 33010602011771号