8.oop之继承

继承

1.概念

  1. 子类继承父类,就可以拥有父类的属性和方法,私有的除外.属于单继承关系,一个类只能继承一个父类.

  2. 把多个子类共有的属性和方法抽取出来放到父类里面,提供给子类使用,私有的除外.

  3. 优点:代码重用,提高了工作效率,扩展性变强.

  4. 父类叫基类,也叫超类。子类也叫派生类。

  5. 示例:

    (1)父类-人类

    /**
     * 	父类 人类
     *
     *
     */
    public class Person {
    	private String name;
    	private int age;
    	private char sex;
    	
    	
    	
    	public Person() {
    	}
    
    	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 char getSex() {
    		return sex;
    	}
    
    	public void setSex(char sex) {
    		this.sex = sex;
    	}
    
    	public Person(String name, int age, char sex) {
    		super();
    		this.name = name;
    		this.age = age;
    		this.sex = sex;
    	}
    
    	public void study() {
    		System.out.println("我是人,我可以学习!");
    	}
    
    }
    
    

    (2)子类1-学生类

    package day19;
    /**
     * 	学生类继承父类Person
     * 
     *
     */
    public class Student extends Person {
    	public Student(String name, int age, char sex) {
    		super(name, age, sex);
    	}
    
    	public Student() {
    	}
    
    	//学费
    	double money;
    	
    	public void playGame() {
    		super.study();//调用父类的方法
    		System.out.println("我是学生可以打游戏!");
    		System.out.println("学生信息:姓名:" + super.getName()+"年龄:"+ super.getAge()+"性别:" + super.getSex()+"我的学费:" + this.money);
    	}
    }
    

    (3)子类2-老师类

    /**
     * 	老师类
     * 
     *
     */
    public class Teacher extends Person{
    	//工资
    	double money;
    
    	private Teacher(String name, int age, char sex) {
    		super(name, age, sex);
    	}
    
    	Teacher() {
    		super();
    	}
    
    	//做足疗
    	public void foot() {
    		System.out.println("我是老师,我可以做足疗!");
    		System.out.println("老师信息:姓名:" + super.getName()+"年龄:"+ super.getAge()+"性别:" + super.getSex()+"我的工资:" + this.money);
    		
    	}
    }
    

    (4)测试

    public class Test {
    	public static void main(String[] args) {
    		//子类可以继承父类的属性和方法
    		Student stu = new Student();
    		stu.setName("张三");
    		stu.setAge(21);
    		stu.setSex('男');
    		stu.money= 1000;
    		stu.study();
    		stu.playGame();
    		
    		Teacher ter = new Teacher();
    		ter.setName("李四");
    		ter.setAge(42);
    		ter.setSex('男');
    		ter.money = 5000;
    		ter.study();
    		ter.foot();
    	}
    }
    

2.this和super的区别

  1. this:代表当前的对象的引用,this可以调用到本类的属性和方法,this(name,age)也可以调用本类的构造方法
  2. super:调用父类属性和方法以及super(name,age)调用父类的构造方法
  3. 在子类没有重写父类的情况下,也可以通过this调用父类的方法.

3.方法执行顺序

继承关系下,会优先走父类的无参构造方法,再去走子类的无参构造方法,后期可以把一些初始化值的工作给子类

4、方法重写与方法重载的区别

  1. 方法重载overloding
    • 在同一个类中,多个方法名相同,但参数的顺序、类型、个数不同,与返回值无关,叫做方法重载。
  2. 方法重写override
    • 在继承关系下,子类和父类(基类)的方法名相同、参数、个数都相同,具体实现不同,叫做方法覆盖,也叫方法重写
    • 优点:扩展性更强

5.abstract修饰抽象类和抽象方法

  1. abstract修饰的类叫抽象类,abstract修饰的方法叫抽象方法
  2. 抽象方法没有方法体,不做具体的实现,继承该类的子类必须重写父类的抽象方法,优势:扩展性强
  3. 抽象类不能被实例化
  4. 抽象类不仅可以有抽象方法,也可以有普通方法
/**
 * abstract修饰的类叫抽象类
 * 	抽象类不能被实例化
 * 	抽象类不仅可以有抽象方法,也可以有普通方法
 *
 */
public  abstract class Person {
	private String name;
	private int age;
	
	//抽象方法
	public abstract   void eat();
	
	public void sleep() {
		System.out.println("抽象类中的普通方法,人睡觉");
	}
}

6. 向上转型和向下转型

  1. 创建子类以父类类型接受,叫向上转型

  2. 可以调到被重写的方法和父类特有方法,

  3. 调用不到子类的特有方法,需要将父类类型的对象向下转型

    public class Test {
    	public static void main(String[] args) {
    		//abstract修饰的类不能实例化
    		//Person per =  new Person();
    		
    		//创建子类以父类类型接受,叫向上转型
    		//可以调到被重写的方法和父类特有方法,
    		//调用不到子类的特有方法,需要将父类类型的对象向下转型
    		Person per = new Student();
    		per.eat();
    		per.sleep();
    
    		//向下转型
    		Student student = (Student)per;
    		student.showStudent();
    	}
    }
    

7.Object类

Object类型是所有类的父类,也可以叫所有类的根类,所有的类都继承与它.子类默认Object类提供的一些方法,比如equals()、toString()方法,具体查API.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值