面向对象的特征——继承、重写的原则讲解、访问权限修饰符讲解、super关键字以及代码演示

继承、继承的原则

1.继承

如果多个类的内容出现重复,把重复的内容放到一个新的类中,通过extends关键字让原来的类和新的类产生关联关系-----继承。原来的类是子类,新的类是父类。子类可以继承父类的部分信息,(父类的私有化信息、构造方法以及构造代码块)都是不能被继承的方法。
1.1继承代码演示

package cn.tedu.extendsx;
 
public class Extends Demo1{
public static void main(String[]args){
//创建子类对象---医生类对象
Doctor d=new Doctor();
d.treat();
}
}
 
 
//定义医疗人员类
//基类、超类、父类
class 医疗人员{
//属性
String name;
int age;
char gender;
//科室
String dept;
 
//方法
public void treat(){
System.out.println(name+"在治病救人...");
}
}
//定义代表医生的类
//通过extends关键字让两个类之间产生关联关系----继承
//派生类、子类
class Doctor extends医疗人员{
public void treat(){
System.out.println(name+"拿着手术刀在治病救人...");
}
}
 
//代表护士的类
class Nurse extends 医疗人员{
 
}

1.2继承方式(单继承)

子类只能有一个父类,一个父类可以有多个子类

Class A extends B{} class B extends C{} class C{} (多级继承)
2.重写(覆盖)
在父子类中出现方法签名一致的方法称之为重写 遵守重写原则–(两等两小一大
1)方法签名一致(前提)
2)当父类的方法返回值类型是基本类型/void时,那么子类方法返回值类型要和父类方法返回值类型保持一致

class A{
public int m(){return 1};
}
class B extends A{
public int m(){return 2};
}

3)当父类方法返回值类型是引用类型时,那么子类方法返回值类要么和父类方法返回值一致,要么是父类方法返回值类型的子类

class A{}
class B extends A{}
class C{
public A m(){return null};
}
class D extedns C{
public A/B m(){return null};
}

4)子类方法的访问权限修饰符要么和父类方法访问权限修饰符范围一致,要么比父类方法访问权限修饰符的范围要大

class A{
void m(){}
}
class B extends A{
public void m(){}
}

3.访问权限修饰符---控制在哪个位置关系(定义信息和获取信息的地方产生了四种位置关系---本类、同包类、其他类、子类)下可以获取定义的信息。可以修饰属性和方法,类可以被public,默认来修饰
在这里插入图片描述
4.super
a.关键字,代表父类对象
b.super语句---在子类构造方法里调用父类构造方法   首行使用
c.每个子类构造方法里默认调用父类无参构造,如果父类没有提供无参构造,就需要每个子类构造方法里手写super有参调用对应的父类有参构造
d.父类对象优先于子类对象先出现
e.父子类的执行顺序(对象级别)----父类的构造代码块-父类构造方法-子类构造代码块-子类构造方法
4.1代码演示

package cn.tedu.extendsx;
 
public class Extends Demo3{
public static void main(String[]args){
//创建子类对象
Pig p=new Pig(1);
//p.eat();
}
 
}
 

//定义代表动物的类
class Animal{
 
//父类构造方法
/*public Animal(){
System.out.println("父类无参构造");
}*/
public Animal(Strings){
 
}
 
public void eat(){
System.out.println("在吃东西...");
}
public void sleep(){
System.out.println("在睡觉...");
}
}
 
//定义代表猪的类
class Pig extends Animal{
 
//父类对象优先于子类对象先出现
 
 
 
//子类无参光构造
//子类所有的构造方法中都有默认调用父类的无参构造
//如果父类没有提供无参构造,每个子类构造方法都要手写super有参语句调用父类有参构造
public Pig(){
//super语句---调用父类构造方法,要在首行
super("sd");
System.out.println("子类无参构造");
}
 
public Pig(int i){
//
super("123");
System.out.println("子类有参构造");
}
 
 
//重写eat方法
public void eat(){
System.out.println("在无忧无虑的吃东西。。。");
System.out.println("吃着吃着吃饱了。。。想睡觉。。。");
 
 
//java中所有的非静态方法与属性都需要通过对象调用
//this?代表当前类的对象
//super代表父类"对象"可以调用父类里的信息
super.sleep();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值