oop面向对象编程-第九天

来源:互联网 发布:上海孚盟软件怎么样 编辑:程序博客网 时间:2024/05/21 11:08
OOP: 面向对象的编程
Object Oriendted Programming


java是一个面向对象的设计思路
有一台电脑:牌子 价格 外观  
程序员的价值的体现


方法的重载
1 方法名一样 ,参数数量、类型、顺序不同
2 同一个类中
3 和返回值类型,和权限修饰符无关 (public  protected  default private )






静态:关键词:static
静态:如果类中的属性或方法被定义为static,则该方法或该属性就变为静态方法或静态属性,表明整个项目都可以共享该属性或方法,它不属于某一个对象,而属于整个类,一旦编译运行后,则内存会悄悄的开辟一个空间来存储静态的东东


优点:和传参一样,能够早整个项目中使用同一个变量
缺点:当程序一运行,静态的变量马上开辟一个空间用来存储 (浪费内存)


static语法:写在数据类型前面,权限修饰符后面  如 public static int a;
(1)能够修饰属性
(2)能够修饰方法


调用: 类名.方法名/属性  








java的设计模式 
单例模式(static):在整个项目中,都会使用同一个对象
//例子:有一个Person对象,调用一个方法,使Person对象的年龄在增长(单例模式)


搞懂单例模式:
1 你要让哪个对象单例
2 写一个类(单例类),然后把需要单例的那个对象放入该类中,成为该类的一个属性private static...
  写一个方法,该方法用来获取该单例的对象getXxxx(一定要判断是否为null)
3 操作类:要操作该单例的对象只需要用单例类.getXX() 就可以得到该对象


工厂模式
MVC


补充:快捷方式实现实体类的封装
右键-source   -getters and setters 和 constructor...
右键-source = shift+alt+s 






练习:写一个实体类 Cat 属性 name weight
我需要在操作类中写两个方法分别键盘输入来改变猫的姓名和体重
需求:全项目只会有一只猫
在主方法中测试:分别调用操作类的两个方法,并且打印改变前后的属性值




继承:extends :指的是类与类的继承 
例如:A extends B    :如果A类继承B类则 B类叫父类/基类 A类叫子类/派生类
一旦A类继承B类则A类就拥有B类的所有方法和属性  


特性:
1 单一性(单继承) :一个子类只能继承一个父类,一个父类可以有多个子类
2 传递性  A extends B B extends C  则A既有B的所有属性和方法,也有C的所有属性和方法




继承和构造方法的联系:
假如 A extends B ,如果当我们new A的时候,则程序会先调用B的不带参的构造方法,然后会调用A的不带参的构造方法




关键字:super
(1) 能够主动的去调用父类的任意构造方法   
语法格式:
1 必须写在子类的构造方法的第一句代码上
2 super()  --调用父类的某一种构造方法
(2)能够点出父类的普通方法(显示的调用父类的方法) 主要是和this区分
语法格式:super.父类的方法名() 


面试题:请说this和super的区别
this表明本类的对象
super表明能够调用父类的构造方法和其他普通方法


public>protected/default>private
protected:如果是继承关系,子类和父类不在同包中,子类依然可以调用
default:如果是继承关系,子类和父类不在同包中,子类不可以调用
如果两个类根本就没关系,只要不在一个包,以上两种权限修饰符都不能调用




方法的重写/覆盖
 1 两个类必须是继承关系
 2 子类的方法名和父类完全相同
 3 子类的重写方法的返回值类型也必须和父类相同
 4 子类的重写方法的权限修饰符必须>=父类的


程序只能调用子类所重写后的方法




语法:
对象 instanceof 类  -- 返回一个boolean 如果对象属于类则返回true,否则编译报错


关于 强转:char<int<double


继承关系也有自转和强转
子类<父类   




多态: 多种形态(父类对象拥有子类行为)  
想到多态必须马上想到以下几点
1 两个互为继承关系的类
2 子类必须重写父类的方法
3 我们一般不会直接new子类,而是通过父类来new子类


语法格式:父类 对象 =new  子类()  :大的new小的




总结:多态:继承+方法的重写
练习:猫狗看病问题 
宠物类 Pet  care() int hp
-------------------------------------------
抽象类 关键字:abstract 用于修饰类和方法 ,加在public 的后面


1 由abstract 来修饰类和方法
2 抽象类不能被实例化(不能new),只能够被继承使用
3 一个类中如果有抽象方法,则这个类必为抽象类
抽象方法语法:public abstract  返回值类型 方法名(参数列表);
3 抽象类可以写正常方法和属性
4 当子类继承了抽象类,则子类必须重写抽象类中的所有抽象方法,除非子类也是抽象类
5 抽象类不能是最终类