面向对象 笔记

以  :

老张开车去东北为例:


没思想

public class Test {

    public static void main(String []args) {

        System.out.println("老张开车去东北");

    }

}


面向过程:


public class Test {

  public static void main(String []args) {

      String driverName = "老张";

      String vehicle = "车";

      String targetPlace = "东北";

      System.out.println(dirverName + "开" + vehicle + "去"   +  targetPlace);

  }

}


抽象出方法:

方法是封装的第一步,也就是说调用函数不必看到具体的语句,直接将参数输入就可得到结果,,,{封装的内容相当于一个黑匣子}

第一次封装

public class Test {

    public static void main  (String []args)  {

          String driverName = "老张";

          String vehicle = "车";

          String targetPlace = "东北";

          go(driverName,vehicle,targetPlace);

     }

     public void go (String driverName , String vehicle , String targetPlace ) {

          System.out.println(driverName + "开" + vehicle + "去" + targetPlace);

     }

}


{面向对象的思维方式 :      可以用如下的方法简化操作  1.考虑名词{需求中大多数的类都是名词,,当然名词也有可能是属性}}

面向对象的过程是一个设计的过程   只要按照面向对象思想进行设计   没有对错    放心大胆滴去设计  大不了再改    设计尽量不要脱离具体环境

比如  老张对象   设计成类时   最好设计成司机而不是人类


2.考虑类的属性:属性有很多,,但要根据具体情况封装属性。  {不可脱离具体的应用环境}


3.方法的封装:


例如:  要封装Driver的方法,,就要站在Driver的角度考虑,,  假设自己就是driver


4.类之间的关系: 如:司机 开 车 司机和车之间的关系是开



面向对象的思想       在于  隐藏{封装}    即降低耦合度  但耦合度为0的系统没有用


package com.bjsxt.oo;

public class Driver {

 private String driverName ;
 
 public String getDriverName() {
  return driverName;
 }

 public void setDriverName(String driverName) {
  this.driverName = driverName;
 }

 public void drive (Vehicle vehicle) {
  
  vehicle.go(new Address("东北"));
 }
 public void drive (Vehicle vehicle , Address targetPlace) {
  vehicle.go(targetPlace);
 }
 
}




package com.bjsxt.oo;

public class Vehicle {

 private String vehicleName ;
 
 
 
 public String getVehicleName() {
  return vehicleName;
 }

 public void setVehicleName(String vehicleName) {
  this.vehicleName = vehicleName;
 }

 public void go(Address targetPlace) {
  
  
 }
}



package com.bjsxt.oo;

public class Address {

 private String targetName ;

 public String getTargetName() {
  return targetName;
 }

 public void setTargetName(String targetName) {
  this.targetName = targetName;
 }
 
  public Address (String targetName) {
   this.targetName = targetName ;
  }
}



继承:  当司机不仅要开汽车,还要开飞机,还要开轮船  时,,继承就起到了作用   可以再写一个类AllVehicle    来表示所有种类的交通工具
这样  drive方法的参数就可写为:drive( AllVehicle av) ,,这样就不必在Driver类中每次都正加一个drive方法了。



最难最核心 多态:   因为多态给我们到来了    ****可扩展性(面向对象的精华)  ,,比如本例中扩展交通工具。。扩展时 只需新建立一个类就可以了。。
特性::  继承   重写    有父类的引用指向对象 



package com.bjsxt.oo;
public abstract class AllVehicle {
 public abstract void go (Address targetPlace) ;
}


package com.bjsxt.oo;
public class Driver {
 private String driverName ;
 
 public String getDriverName() {
  return driverName;
 }
 public void setDriverName(String driverName) {
  this.driverName = driverName;
 }
 public void drive (AllVehicle av) {
  
  av.go(new Address("东北"));
 }
 public void drive (AllVehicle av , Address targetPlace) {
  av.go(targetPlace);
 }
 
}


package com.bjsxt.oo;
public class Vehicle extends AllVehicle{
 private String vehicleName ;
 
 
 
 public String getVehicleName() {
  return vehicleName;
 }
 public void setVehicleName(String vehicleName) {
  this.vehicleName = vehicleName;
 }
 public void go(Address targetPlace) {
  
  System.out.println("Vehicle ======" + targetPlace.getTargetName());
 }
}
  


package com.bjsxt.oo;
public class Plane extends AllVehicle{
 private String planeName;
 
 public void go(Address targetPlace) {
  
  System.out.println("Plane =====" + targetPlace.getTargetName());
 }
 
 
 
}



package com.bjsxt.oo;
public class Test {
 public static void main(String[] args) {
  Driver driver = new Driver();
  driver.setDriverName("老张");
  Vehicle car = new Vehicle();
  car.setVehicleName("奥迪");
  
  Address a = new Address("日本");
  
  driver.drive(new Plane() , a);
 }
}



经验::
        设计没有绝对的对与错
        OverDesign也是一种罪过    {如本例中设计   人类    然后  用Driver  继承人类}     要实事求是。


*******
抽象类::脑袋中有这个概念但没有具体的东西  ,,设计成抽象类      如   交通工具

接口::如果只是考虑一类事物或几类事物的共同的特征,,如  会飞的   会跑的  




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值