面向对象&匿名对象&内部类

面向对象

1、定义:

面向对象的思想是把一个项目、一件事情分成更小的项目,或者说分成一个个更小的部分,每一部分负责什么方面的功能,最后再由这些部分组合而成为一个整体。(找合适的人做合适的事情)

2、面向对象思想

(1)面向对象是基于面向过程的编程思想

(2)万物皆对象

(3)对象具有唯一性

(4)任何对象都具有一定的特征和行为,特征是事物的基本描述,行为是事物的功能

(5)类是一组相关的属性和方法的集合,是一个抽象的概念

(6)对象是类的具体存在

(7)在一组相同或相似的对象中,抽取出共性的特征和行为,保留所关注的部分就是类的抽取

(8)类是模板、图纸,通过类创造的对象就是实体

3、面向对象的优点:

(1)直观、高效、与人类的思维习惯一致

(2)信息隐藏,提高了程序的可维护性和安全性

(3)提高了程序的可重用性

类和对象

  1. 类是对象的抽象,对象是类的具体实现。

  2. 类是对某一类事物的描述,是抽象的、概念上的定义。类是模板,包含了一类事物所共有的特征(即属性) 和行为(即方法)。

    3.对象是类的具体体现(属性和方法),是具体的、独一无二的个体。

类的定义:类是一种自定义的数据类型。

格式:
  class 类名{
     成员变量;//Field
     成员方法;//Method
  }
  解析:class:定义类的关键字
       类名:大驼峰原则,见名知意;类名是一种数据类型(即自定义引用的数据类型),就是模板的名字
       成员变量(属性/特征描述):定义在类中,方法外的变量,用来描述类的特征
       成员方法(行为描述):定义在类中,用来描述类的功能
class Student{
   //成员变量
    String name;
    int age;
    char sex;
   //成员方法
    public void eat() {
		System.out.println("吃");
	}

	public void sleep() {
		System.out.println("睡");
	}

	public void play() {
		System.out.println("玩");
	}
}

对象的创建

参考扫描器Scanner的创建

Scanner sc=new Scanner(System.in);
格式:
  类名 对象名 =new 类名([参数...]);

对象的使用

参考数组和Scanner的使用

//数组:
int[] array = new int[10];
array.length// 注意:这里没有 (),说明这不是方法,我们用它来表示数组的长度,数组的长度是数组的一个属性
//Scanner   
Scanner sc = new Scanner(System.in);
sc.nextInt();
格式:
	使用成员变量:
		对象名.成员变量
    
	使用成员方法:
    	对象名.成员方法()
    .的含义是"的"
    扩展:如果直接打印对象名,会得到一个对象的【地址】
         这个地址包含两部分:1、完整的包名;2、当前对象存储在堆区内存中的空间首地址。
// 通过Student类对象student操作name、sex、age属性
// 进行赋值操作
student.name = "张三";
student.age = 25;
student.sex = '男';

// 通过person进行取值操作
System.out.println(student.name);
System.out.println(student.age);
System.out.println(student.sex);

student.eat();
student.sleep();
student.play(); 

注意:大写开头的都是类,小写开头的都是变量,带()的都是方法

匿名对象

1、概述:没有名字的对象,是对象的一种简化表示形式

2、特性:一次性,每次使用都是一个新的对象

3、使用情景

1、对象调用方法仅使用一次,然后等待销毁

2、作为实际参数传递

4、优点:提高开发效率,简化代码结构

public class TestDog{
	public static void main(String[] args) {
        // 对象调用方法仅使用一次
		new Dog().sleep();
		
        // 作为实际参数传递
		useDog(new Dog());
	}
	
	public static void useDog(Dog dog) {
		dog.sleep();
	}
}

class Dog {
	String name;
	int age;
	
	public void sleep() {
		System.out.println("小狗睡觉.....");
	}
}

形参和返回值

1.类名作为形参和返回值

1、方法的形参是类名,其实需要的是该类的对象

2、方法的返回值是类名,其实返回的是该类的对象

//猫类
public class Cat{
 Public void eat(){
  System.out.println("猫吃鱼");
 }
}
//猫的操作类
public class CatOperator{
    public void useCat(Cat c){//  Cat c=new Cat();
     c.eat();
   }
    public Cat getCat(){
        Cat c=new Cat();
        return c;
    }
}
//测试类
public class CatDemo{
    public static void main(String[] args){
        //创建操作类对象
        CatOperator co=new CatOperator();
        Cat c=new Cat();
        co.useCat(c);
        Cat c2=co.getCat();//new Cat();
        c2.eat();
    }
}
---------------------------------------------------
    猫吃鱼
    猫吃鱼

2.抽象类名作为形参和返回值

//抽象类
public abstract class Animal{
    public abstract void eat();
}
//
public class Cat extends Anmial{
    @Overide
    public void eat(){
        System.out.out("猫吃鱼");
    }
}
//操作类
public class AnimalOperator{
    piblic void useAnimal(Animal a){
        a.eat();
    }
}
//测试类
public class AnimalDemo{
    public static void main(String[] args){
        AnimalOperator ao=new AnimalOperator();
        Animal a=new Cat();
        ao.useAnimal(a);
    }
}
------------------------------------------------------
    猫吃鱼

3.接口名作为形参作为返回值

1、如果方法的形参是一个接口名,其实所需要的是这个接口的实现类对象

2、方法富人返回值是一个接口名,其实所需要的是这个接口的实现类对象

//接口
public interface Jumpping{
    void jump();
}

//接口的操作类
public class JumppingOperator{
    public void useJumpping(Jumpping j){//  Jumpping j=new Cat();
       j.jump();
    }
    public Jumpping getJumpping(){
       Jumpping j=new Cat();
       return j;
    }
}
//猫类
public class Cat implements Jumpping{
  @Override
  public void jump(){
    System.out.println("猫可以跳高了");
  }
}

//测试类
public class JumppingDemo{
  public static void main(String[] args){
  //创建操作类和对象,并调用方法
   JumppingOperator jo=new JumppingOperator();
   Jumpping j=new Cat();
   jo.useJumpping(j);
   //ctrl alt v 
   Jumpping j2= jo.getJumpping();//new Cat();
   j2.jump();
  }
}

-------------------------------------------------------------------------
 猫可以跳高了
 猫可以跳高了

4.内部类

1.概念:就是在一个类中定义一个类

(在一个类A的内部定义一个类B,则类B就被称为内部类)

2、格式

public class 类名{

     修饰符 class 类名{

    }

 }

3、内部类的访问特点

​ (1)内部类可以直接访问外部类的成员,包括私有

​ (2)外部类要访问内部类,必须创建对象

4、举例

public class Outer{
    private int num=10;
    public class Inner{
      public void show(){
        System.out.println(num);
      }
    }
    public void method(){
    Inner i=new Inner();
    i.show();
    }
}

5.成员内部类和局部内部类

1、分类

在类的成员位置:成员内部类

在类的局部位置:局部内部类

2、成员内部类,外界是如何创建对象使用

​ 格式:外部类名.内部类民 对象名=外部类对象.内部类对象

3、举例

//成员内部类
    
//内部类
pubilc class Outer{
   private int num=10;
   /**
   public class Inner{
     public void show(){
        System.out.println(num);
     }
   }
   **/
   private class Inner{
     public void show(){
        System.out.println(num);
     }
   } 
    public void method(){
        Inner i=new Inner();
        i.show();
    }
}
//测试类
public class InnerDemo{
  public static void  main(String[] args){
      //创建内部类对象
      /**
      Outer.Inner oi=new Outer().new Inner();
      oi.show();
      **/
      //创建外部类对象
      Outer o=new Outer();
      o.method();
  }
}
----------------------------------------------------------------------
    10
//局部内部类

//内部类
public class Outer{
    private int num=10;
    public void method(){
        int num2=20;
        class Inner{
            public void show(){
                System.out.println(num);
                System.out.println(num2);
            }
        }
        Inner i=new Inner();
        i.show();
    }
}
//测试类
public class OuterDemo{
    public static void main(String[] args){
        Outer o=new Outer();
        o.method();
    }
}
--------------------------------------------------------------------------
    10
    20

6.匿名内部类(局部内部类)

前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类

1.格式

new 类名或者接口名(){

​ 重写方法;

}

//内部类
public class Outer{
    public void method(){
       Inter i= new Inter(){
            @Override
            public void show(){
                System.out.println("匿名内部类");
            }
        };
        i.show();
        i.show();
        /**多次调用
        new Inter(){
            @Override
            public void show(){
                System.out.println("匿名内部类");
            }
        }.show();**/
    }
}
//接口
public interface Inter{
    void show();
}

//测试类
public class OuterDemo{
    public static void main(String[] args){
        Outer o=new Outer();
        o.method();
    }
}
--------------------------------------------------------
    匿名内部类
    匿名内部类

7.匿名内部类在开发中的使用

//接口
public interface Jumpping{
    void jump();
}

//接口的操作类
public class JumppingOperator{
    public void method(Jumpping j){//new Cat();
       j.jump();
    }
}
//猫类
public class Cat implements Jumpping{
  @Override
  public void jump(){
    System.out.println("猫可以跳高了");
  }
}
//猫类
public class Dog implements Jumpping{
  @Override
  public void jump(){
    System.out.println("狗可以跳高了");
  }
}
//测试类
public class JumppingDemo{
  public static void main(String[] args){
     JumppingOperator jo=new JumppingOperator();
     Jumpping j=new Cat();
     jo.method(j);
     Jumpping j2=new Dog();
     jo.method(j2); 
     System.out.println("===============");
     jo.method(new Jumpping(){
          @Override
          public void jump(){
              System.out.println("猫可以跳高了");
          }
     });
     jo.method(new Jumpping(){
          @Override
          public void jump(){
              System.out.println("狗可以跳高了");
          }
    });
  }
}
----------------------------------------------------
    猫可以跳高了
    狗可以跳高了
    ===============
    猫可以跳高了
    狗可以跳高了
posted @ 2022-07-28 11:01  zx墨染  阅读(57)  评论(0)    收藏  举报