编程练习生的第四天!

继承和封装

Super

  • super 和 this
  • super:指代父类对象
  • super使用在构造器的首行,调用父类的某个构造器
  • super(参数列表)
  • 使用在首行
  • 默认在子类构造器的首行会调用父类空构造,如果显示定义super(参数),不会再默认调用父类空构造了
  • 需求:当创建父类对象时,需要使用父类中的其他构造器,通过super(参数)显示定义调用哪一个,否则默认调用空构造
  • 注意:this和super不能同时存在与构造器的首行调用构造器,除了显示定义this(),隐式调用super(),仅仅调用父类空构造
  • 区分同名问题
  • 如果存在子父类中成员同名问题,默认调用子类的,就近原则
  • 如果不存在同名,默认调用父类,相当于省略了super.
  • this和super都不能使用在static内容中
  • 创建对象:先父类后子类(默认创建的父类对象在子类的内存空间中,外部无权使用默认创建的在子类内存中的父类对象,如果需要使用父类对象,自己手动创建父类对象)
    */
public class SuperDemo {
 public static void main(String[] args) {
  Zi zi=new Zi("heihei",14);
  System.out.println(zi);
  zi.info();
 }
}
class Fu{
 String name="呵呵";
 int age;
 public Fu() {
  System.out.println("我是父类空构造");
 }
 public Fu(String name,int age) {
  this.name=name;
  this.age=age;
  System.out.println("我是父类带参构造");
 }
 
 public void test(){
  System.out.println("fU...........");
 }
 
}
class Zi extends Fu{
 int a;
 String name="哈哈";
 public Zi() {
  //super();
  super();
  System.out.println("我是子类空构造");
 }
 //从父类中继承的某些成员属性赋值
 public Zi(String name,int age) {
  /*this.name=name;
  this.age=age;*/
  //super(name,age); 
  this();
  System.out.println("我是子类带参构造");
 }
 

继承

  • 继承:

  • 子承父业

  • 使用继承的目的:

  • 为了提高代码的复用性

  • 父类|基类|超类

  • 子类|派生类

  • 如何使用继承:

  • 定义子父类,使用extends关键字 子类 extends 父类

  • 定义父类:抽取一系列子类的功能,定义为父类

  • 子类一旦继承父类,就能够使用父类中的内容

  • 子类可以定义自己独有的内容,扩展父类的功能

  • java中类只能单继承,可以多实现

  • 继承: 延续+扩展

  • 继承: 延续+扩展

  • 但继承的优点:

  • 使用简单

  • 单继承的缺点:

  • 局限性大,不便于后期维护

  • 开闭原则:面向对象的设计原则之一

  • 对修改关闭,对扩展开放

//定义一个父类
//子类中相同的内容
//子类继承父类,使用父类中的内容
class Person{
 String name;
 int age;
 
 public void sleep(){
  System.out.println("休息");
 }
}
//子类  教师类  继承 Person类
class Teacher extends Person{
 String subject;
 
 public Teacher() {
  // TODO Auto-generated constructor stub
 }
 
 public void teach(){
  System.out.println("授课");
 }
 
}
//学生类
class Student extends Person{
 String schoolName;
 
 public Student() {
  // TODO Auto-generated constructor stub
 }
 
 public void study(){
  System.out.println("学习");
 }
 

权限修饰符

/*

  • 权限修饰符: 内容被访问的权限
    成员修饰符,不能修饰局部
  • 能够修饰类:public|default(隐式定义)
  • 私有的内容是不能继承的
    protected使用途径:
  • 1.同包
  • 2.不同包子类继承关系使用

重写与重载

  • 重写 与 重载的区别:

  • 重写:

  • 1.不同的类

  • 2.继承关系|实现

  • 3.方法签名相同(方法名+参数列表)

  • 测试一个方法是否为标准的重写方法:

  • 1.重写方法左边会出现三角形

  • 2.@Override 强制检测是否为重写方法

  • 为什么要使用重写?

  • 父类的功能你也有,但是实现体不一样,就可以对这个功能在子类中进行重写

  • 调用: 如果子类中有重写方法,会调用子类的,否则调用父类的–就近原则

要求:

  • == :方法签名完全相同
  • <= :返回值类型如果是基本数据类型必须相等,如果是引用数据类型,子类<=父类
  • <= :权限修饰符 子类>=父类

不能被重写的方法:
1.被private修饰的方法不能被重写
2.被final修饰的方法不能被重写
3.被static修饰的方法不能被重写
注意:如果子类中定义的方法名与父类静态方法的方法名相同,子类这个方法也要被static修饰,但是却不是重写方法

public class OverrideDemo {
 public static void main(String[] args) {
  new SiCong().words();
  new SiCong().hehe();
 }
}
class JianLin{
 public JianLin words(){
  System.out.println("先定一个小目标,挣他一个亿...");
  return null;
 }
 
 public static void hehe(){
  System.out.println("hhhhhhhhhhhhhhh");
 }
}
class SiCong extends JianLin{
 //重写: 父类的功能你也有,但是实现体不一样,就可以对这个功能在子类中进行重写
 @Override
 public JianLin words(){
  System.out.println("我不在乎的我的朋友有没有钱,反正都没我有钱...");
  return null;
 }
 //不是重写方法
 public static void hehe(){
  System.out.println("hhhhhhhhhhhhhhh");
 }
}

                                                             2019.07.07
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值