Java学习之对象与类

思维导图

类与对象.png

一、对象与类的概述

对象

  1. 含义:又来描述客观事物一个实体,由一组属性和方法构成(具体的实体)

  2. 对象的特征:

    1.属性--对象具有的各种特征 
    2.行为--对象执行的操作
    
  3. 使用对象的步骤

     1. 创建对象(如:类名   对象名=new  类名();
         DNF ace=new DNF();)
     2. 引用对象成员:使用“.”进行操作
           引用类的属性: 对象名.属性--ace.name="武神 "
           引用类的方法:对象名.方法名()--ace.show();
    

  1. 含义:具有相同属性和方法的一组对象的集合 (抽象的概念)
    -----是对象的类型
  2. 类与对象的关系是:
  • 类是对象的抽象---模板,对象是类的具体---实例。

  • 定义类的步骤--

      1. 定义类名
      1. 编写类的属性
      1. 编写类的方法

二、面向对象的特性

  1. 封装-----是把数据及处理数据的行为结合起来,不被外界干扰滥用的程序设计机制

  2. 多态------是使用一个接口访问一组行为的特性,执行哪个行为由具体情况而定。

  3. 继承------是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类(或派生类),现有类被称作父类(或基类),子类会自动拥有父类所有可承的属性和方法。

三、类的成员

1. 成员变量
  • 定义:成员变量或域变量----在类中定义的属性数据
  • 种类:

类的成员变量,即域变量。
形式参数列表中的变量,称为参变量。
方法内部声明的变量,称为局部变量

  • 成员变量和局部变量的区别

    • A: 在类中的位置不同
      • 成员变量:在类中方法外
      • 局部变量: 在方法定义中或者方法声明上
    • B: 在内存中的位置不同
      • 成员变量:在堆内存中
      • 局部变量:在 栈内存中
    • C:生命周期不同
      • 成员变量:随着对象的创建而存在,随着对象的消 失
      • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
    • D: 初始化 值不同
      • 成员变量:有默认初始化 值
      • 局部变量:没有买默认初始化值,必须定义,赋值 ,然后才能使用。
  • 注意事项:

局部变量名称可以和成员变量名称相同,在方法使用的时候,采用的是就原则

2. 成员方法
  • 定义:

用来定义对类成员变量进行操作

  • 种类:
  1. 构造方法
  • 当用户定义了构造方法时,程序不再产生默认的构造方法.
  • 构造方法只在创建对象时调用
  • 构造方法的注意事项:
    • A: 如果我们没有给出构造方法,系统自动提供一个无参数构造方法
    • B:如果我们给出构造方法,系统将不会 给出默认的无参构造方法
  • 建议:定义了有参构造时,也添加一个无参构造方法
  • 例如:
//定义一个学生类
public class Student{
    private String name;
    private int age;
    //无参构造
    public Student(){
    }
    //有参构造
    public Student(String name){
    //this关键字表示本对象
        this.name = name
    }
}

//调用
Student s1 = new Student();
Student s2 = new Student("张三");
  1. 普通方法
  • 方法的重载

    • 定义: Java中,同个类中有多个同名的方法,称为重载
    • 满足重载的条件:
      1. 方法名相同
      2. 参数列表不同:参数个数、参数类型、参数顺序
      3. 形参名不同、返回值类型不同不影响方法的加载
  • 注: 除了成员方法重载外,构造方法也可以重载,定义了重载构造方法的类可以用这些不同的构造方法创建对象。

  • 方法重写
    • 定义:若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法
public class Animal{
    
    public void eat(){
        System.out.print("吃东西!!");
    }
}

public class Dog extends Animal{
    
    //子类重写了父类的eat方法
    @Override
    public void eat(){
        System.out.print("吃狗粮!!");
    }
}


3. 类成员初始化顺序

四、内部类

什么是内部类呢?

  1. 内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

作用:

  1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

  2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

  3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

种类: 成员内部类,静态内部类,方法内部类,匿名内部类。

访问修饰符:

  1. private:为了保护 数据
  2. static:为了容易访问数据

一、成员内部类:

  1. 可以使用任意访问控制符修饰,如 public 、 protected 、 private 等
  2. 直接访问 外部类中的私有属性A:
  • 注意:外部类不能访问内部类的成员变量和成员方法。
   public class outer{
       private String A="fds";
       public int i=1;
       public class inner{
           String B="asf"
           int i=2;
           public void show(){
               System.out.println(A);
               System.out.println(B);
               System.out.println(outer.this.i);//当外部类与内部类成员变量相同时,访问外部类成员的语句,外部类名.this.变量名
               System.out.println(i);//访问内部类成员变量
           }
   
       }
   
   }
   public static void main(String [] ages){
       //创建外部类的对象
       outer  o=new out();
       //创建内部类的对象;
       inner i=o.new inner();//创建内部类的语句:内部类 对象名 = 外部类对象.new 内部类( );
   
   }

二、方法内部类

概念:

  1. 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

  2. 注意:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符

三、静态内部类

特点:

  1. 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

  2. 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

  3. 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

    sample1:
    //外部类
    
    public class HelloWorld {
        // 外部类中的静态变量score
      private static int score = 84;
        // 创建静态内部类
    public static class SInner {
         // 内部类中的变量score
         int score = 91;
    public void show() {
        System.out.println("访问外部类中的score:" + HelloWorld.score );
    //通过“类名.静态成员”访问外部类的静态成员                 System.out.println("访问内部类中的score:" + score);
        
        }
        
    }
    
    // 测试静态内部类
    public static void main(String[] args) {
            // 直接创建内部类的对象
     SInner si=new SInner();
     //创建静态内部类,可以直接创建 内部类 对象名= new 内部类();  
         // 调用show方法
        
        si.show();
        
    //不过为了更清晰知道这个静态内部类Sinner的位置,一般创建静态内部类的格式为:外部类名.内部类名 对象名 = new 外部类名.内部类名();
    HelloWorld.SInner si=new HelloWorld.SInner();
        }
    
    }
三、使用内部类实现迭代器
public class Sequence {
    private Object[] items;//对象数字组
    private int next=0;//当前对象下标
    public Sequence(int size){
        items=new Object[size];
    }
    //添加
    public void add(Object x){
        if(next<items.length){
            items[next++]=x;
        }
    }
    private class SequenceSelector implements Selector{
        private int i=0;
        //判断是否打印结束
        @Override
        public boolean end() {
            // TODO Auto-generated method stub
            return i==items.length;
        }

//获取当前对象
        @Override
        public Object current() {
            // TODO Auto-generated method stub
            return items[i];
        }
//下一对象
        @Override
        public void next() {
            if(i<items.length){
                i++;
            }           
        }
    }
    public  Selector getSelector(){
        return new SequenceSelector();
    }
    public interface Selector{
        boolean end();//判断是否结束
        Object current();//获取当前对象
        void next();//获取下一个对像
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,788评论 0 10
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,631评论 18 399
  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 464评论 0 2
  • 寒潮来袭,天真的冷了。寒来暑往,四季更迭,亘古不变,这就是岁月,默默流逝,等我们不经意回头,一切猝不及防。 岁月带...
    若素向阳阅读 121评论 0 0
  • 绿灯亮了 你穿越斑马线 像那年夏天 你穿过戈壁沙漠 疲惫的卡车 呼啸而来 红的白的花绽开 你自由了 如同一缕青烟
    花间奇谈阅读 203评论 2 3