面向对象(对封装,继承,多态,接口的总结)

面向对象
以下是我对近期学习面向对象的整理的干货:
(满满的干货,主要是总结的老师上课时候总结的重点)
主要学习了四大版块:封装,继承,多态,接口
Java学习中,主要使用的就是面向对象的思想(面向对象就是采用“现实模拟”的方法设计和开发程序。),所以这四大版块的学习和掌握是非常重要的。
封装:(set get private this)
封装顾名思义就是打包装起来,为什么要封装呢?封装又有什么好处?
封装就是隐藏类的一些具体实现,通过提供一些接口,来实现一些功能。将类的状态信息隐藏在类的内部,不允许在类的外部直接访问,而是通过这个类提供的一些方法,来对属性进行操作以及访问。
封装的好处:1·控制存取属性值的语句,来避免对数据的不合理操作
2·一个封装好的类,是非常容易使用的。
3·代码更加模块性,可读性。
封装的步骤:改属性的可见性来限制对属性的访问;为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的存取;在赋值方法中,加入对属性的存取控制语句。
封装的难点:搞清楚get和set的作用,get是获取,然后返回值,set是设置,传参数进去。
继承:(extends)
子类 扩展(继承)父类的语法规则如下:
修饰符 class 子类类名 extends 父类类名


共有的东西 提取到父类,子类是 存储子类自己特有的东西,父类是没有的,父类是共性,子类是特性。
你的是我的(有些不能被继承的东西除外), 我的还是我的。


继承的注意点:
1·.类继承的第一个注意点:类的构造方法,不可被继承
java中的类,都是直接或者间接的继承自 java.lang.Object类的,如果一个类,产生后没有指定继承自哪个类,那么默认直接继承自java.lang.Object
构造方法一旦程序员自己给定了,那么jvm不再提供默认的 无参构造方法。
如果我们自定义了 父类的构造方法, 那么父类的 无参构造方法 会被收回,当子类在调用无参构造方法 new对象的时候, 如果父类中没有找到 无参构造方法程序出现运行时错误。
2·虽然不能继承构造方法,但是我们可以 在子类的构造方法中通过关键字 super 来调用到 父类的构造方法
用super的注意点:
1.super 关键字,它没有引用任何对象, 它的作用就是 通知编译器,到我的父类中找这个方法调用它。
2.super关键字,也可以用在其他方法中,不仅仅是构造方法
3.它跟this调用构造方法的重载一样, 要用在第一行。
this 是指当前正在初始化的这个对象的引用
3·private 修饰的成员变量或者方法,是这个类私有的,不能在类的外部,以及子类中直接访问,子类不能继承 private修饰的成员变量和方法。
但可以用set和get来获取
4·如果子类和父类不在同一个包,protected修饰的属性和方法 也是可以被继承下来的。
5· final 修饰类:不允许被继承
多态
多态: 一个对象 的多种状态
多态的三要素:
1.一定要有继承
2.一定要重写
3.父类的指针,指向子类的对象
Pet p=new Cat();
多态的强制转换
多态的强制转换可以分为向上强转型和向下转型
这个还是用例子来解释吧!

class A4 extends paper
{
  void wirte()
  {
      System.out.println("用A4纸张写字");
  }
  void test()
  {
      System.out.println("test");
  }
}class A5 extends paper
{
  void wirte()
  {
      System.out.println("用A5纸张写字");
  }
}class Test
{
    public static void main(String[] args)
    {
         //向上转型 
     paper p=new A4();
     /*
     向上强制转换时不用强制,是因为父类的东西子类都有,所以编译器去子类中找这个方法时是能找到的,所以不会报错
     */
     p.wirte();
     //向下转型
     A4 a=(A4)p;
     /*因为p是父类的指针,所以如果想调用子类特有的属性时,编译器会报错,因为父类中没有子类特有的属性,编译器去父类中找不到这个方法就会报错,所以要在父类的p的这个对象前面加一个子类的类名A4,让编译器去子类中寻找这个方法.*/
     a.test();
     paper b=new A5();
     b.wirte();
    }
}abstract class paper
{
 abstract void wirte();
}

接口(interface implements)
接口使用的总结:
1.接口本身 是一个特殊的类
2.接口的成员变量 默认是 public static final 修饰的,也就是说接口中的成员变量实际上是一个常量
3.接口中的 方法 都是抽象方法,默认修饰 public abstract
4.接口是不能够创建对象的
5.接口是没有构造方法
6.因为接口是提供给 类 去使用的,非抽象类去实现一个接口的时候,必须要把接口中所有的方法 都要实现。
接口的作用:
1.扩展功能
2.定义约束规范
3.程序解耦合性
接口的多态:
接口的引用类型变量 指向 接口实现类 的对象
接口实现类 —》 就是实现了这个接口的类
InkBox ink = new ColorfulInkBox();
接口的多态实现:
(1)要有接口
(2)要有 接口的实现类
(3)要让接口的引用类型变量 指向 接口实现类 的对象


接口的多态使用方式
左边是 接口类型的 引用类型变量
右边是 实现这个 接口的类 的对象


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值