zoukankan      html  css  js  c++  java
  • 0119 面向对象

    1、创建类的格式

    public class 类名 {

        //可编写0至n个属性

        数据类型 变量名1;

        数据类型 变量名2;

        //可编写0至n个方法

        修饰符 返回值类型 方法名(参数){

          执行语句;

      }

    }

    例:创建一个汽车类

    public class Car{

      //成员变量
      String color;
    i  nt gulu;
      //成员方法
      public void run(){
        System.out.println("颜色为"+color+",轱辘个数为:"+gulu+"个的小汽车在跑");
      }

    }

    在创建一个测试类

    public class Demo01 {

      public static void main(String[] args) {
        //创建汽车对象
        Car car=new Car();
        //赋值
        car.color="红色";
        car.gulu=4;
        //调用方法
        car.run();
      }
    }

    运行结果:

    颜色为红色,轱辘个数为:4个的小汽车在跑

    图解:

    2、局部变量与成员变量的区别

    (1)定义位置不同,成员变量在类中,局部变量是定义在方法中

    (2)在内存中的位置不不同,成员变量随对象进堆,局部变量随方法进栈

    (3)生命周期不同,成员变量随对象进堆,随着对象的消失而从堆中进jc垃圾回收机制,局部变量随方法进栈执行,执行完毕弹栈消失

    (4)初始化不同,成员变量随对象进堆附默认值,局部变量没有默认初始化值

    面向对象的特点:封装,继承,多态

    3、封装

    概念:隐藏了实现细节,并对外提供公共的访问方式

    例:创建一个Person类

    public class Person {
      private String name;
      private int age;
      //存值的方法
      public void setName(String n){
        name=n;
      }
      //取值
      public String getName(){
        return name;
      }
      //存值
      public void setAge(int n){
        if(n<0){
          System.out.println("年龄错误");
        }else{
          age=n;
        }
      }
      //取值
      public int getAge(){
        return age;
      }
      public void speak(){
        System.out.println("我叫"+name+"今年"+age+"岁。");
      }
    }

    创建一个测试类

    public class Demo01 {

      public static void main(String[] args) {

        Person person=new Person();
        //调用赋值方法
        person.setName("小红帽");
        //调用取值方法
        System.out.println(person.getName());
        //调用赋值方法
        person.setAge(21);
        //调用取值方法
        System.out.println(person.getAge());
        person.speak();
      }

    }

    注:在该例子中,在Person类中对名字和年龄进行了封装,加了private关键字,加了之后,该属性只能在类中进行访问,在其他类中不可访问,

    所以将这两个属性封装在了方法中,在其他类中调用该方法就能使用

    封装this关键字

    this关键字一般用来区分成员变量和局部变量重名的问题

    this代表类对象本身,简单来讲就是哪个对象调用this,这个this就代表哪个对象

    例:创建一个Person类

    public class Person {
      private String name;
      private int age;
      //存值的方法
      public void setName(String name){
        this.name=name;
      }

    注:该方法中的形式参数与Person类中的属性name 重名,则this.name就代表这个Person类对象的name,则等号右边的name代表该方法传入的参数

      //取值
      public String getName(){
        return name;
      }
      //存值
      public void setAge(int age){
        this.age=age;
      }
      //取值
      public int getAge(){
        return age;
      }
      public void speak(){
      System.out.println("我叫"+name+"今年"+age+"岁。");
      }

    }

    图解:

    例:写一个方法用来比较两个人是否是同龄人

    首先创建一个Person类

    public class Person{

    int age;

    //判断两个人是否是同龄人
    public boolean compare(Person p){
    return this.age==p.age;
    }

    }

    注:这个判断两个人是否是同龄的方法,前提是两个人类对象的年龄值是否相等,返回值是布尔类型

    创建一个测试类

    public class Demo02 {

      public static void main(String[] args) {
    //创建两个人对象
      Person p1=new Person();
      p1.setName("公雪");
      p1.setAge(21);
      Person p2=new Person();
      p2.setName("海绵宝宝");
      p2.setAge(21);
      System.out.println(p1.compare(p2));

    }

    }

    4、继承

    子类可以自动继承父类所有可继承的属性和方法

    格式:

    class 子类 extends 父类 {}

    例:创建一个Emp类

    public class Emp {
      String name;
      public void work(){
        System.out.println("我叫"+name);
      }
    }

    创建一个子类开发部门类

    public class KaiFa extends Emp {

    }

    创建一个测试类,在测试类内创建一个开发部门对象

    public class Demo01 {

    public static void main(String[] args) {
      KaiFa kf=new KaiFa();
      kf.name="张三";
      kf.work();
      }
    }

    运行结果:我叫张三;

    继承注意事项:

    java中类继承稚嫩和单继承,多个类可以继承一个父类,但一个类只能继承一个父类,可以多层继承,比如c继承b,b继承a

    如果父类和子类拥有同样的方法名还有同样的属性,但属性值不同,则java采用就近原则,子类对象就会采用子类中的方法名和属性

    例:

    创建一个父类

    public class Fu {
    int a=1;
    public void sleep(){
    System.out.println("父类睡觉");
    }
    }

    创建一个子类

    public class Zi extends Fu{
    int a=2;
    public void sleep(){
    System.out.println("子类睡觉");
    }
    }

    创建一个测试类

    public class Demo01 {
    public static void main(String[] args) {
    Zi z=new Zi();
    System.out.println(z.a);
    z.sleep();
    }
    }

    此时运行结果为;

    2
    子类睡觉

    继承 方法重写

    关键字super,代表父类,例:super.show() 代表父类的show方法

    方法重写举例:

    创建一个父类:老年机类

    public class OldPhone {

    public void sendMassage(){
    System.out.println("发短信");
    }
    public void call(){
    System.out.println("打电话");
    }
    public void show(){
    System.out.println("显示来电号码");
    }

    }

    创建一个子类:新手机类

    public class NewPhone extends OldPhone {
    public void show() {
    //super父类对象
    super.show();
    System.out.println("显示头像");
    System.out.println("显示姓名");
    }
    }

    注:子类中对父类的show方法进行了重写,在原本父类show方法的功能基础上添加了新的功能

    创建一个测试类

    public class Demo01 {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    NewPhone p=new NewPhone();
    p.call();
    p.sendMassage();
    p.show();
    }
    }

    运行结果为:

    打电话
    发短信
    显示来电号码
    显示头像
    显示姓名

    方法重写注意事项:

    子类方法覆盖父类方法,必须要保证权限大于等于父类权限

    必须一模一样:方法的返回值类型 方法名 参数列表都要一样

    方法重载:在同一个类中,方法名相同,参数列表,数量,类型,个数,只要有一个不同,这就叫方法的重载

    方法重写:在子类中出现与父类,修饰符,返回值,方法名,参数列表一模一样的方法叫方法重写

  • 相关阅读:
    CF-478C
    HDU-2074-叠筐
    HDU-2037-今年暑假不AC
    POJ-2785-4 Values whose Sum is 0
    HDU-1160-FatMouse's Speed
    HDU-1297-Children’s Queue
    Redis客户端管理工具的安装及使用
    Redis客户端管理工具,状态监控工具
    memcached可视化客户端工具
    javascript回调函数
  • 原文地址:https://www.cnblogs.com/-gongxue/p/14296879.html
Copyright © 2011-2022 走看看