JavaSE基础六(抽象类与接口)

news/2024/7/3 12:25:05 标签: java, 抽象类, , 接口, 多态

文章目录

    • 内部
      • 1.1 内部概述
      • 1.2 成员内部
      • 1.3 局部内部
      • 1.4 匿名内部
      • 1.5 匿名内部在开发中的使用

内部

1.1 内部概述

内部:就是在一个中定义一个。举例:在一个A的内部定义一个B,B就被称为内部

内部的定义格式:

  • 格式:
java">public class {
     修饰符 class {
        
    }
}
  • 范例:
java">public class Outer{
    public class Inner{
        
    }
}

内部的访问特点

  • 内部可以直接访问外部的成员,包括私有
  • 外部要访问内部的成员,必须创建对象
java">/*
	内部的访问特点

- 内部可以直接访问外部的成员,包括私有
- 外部要访问内部的成员,必须创建对象
 */
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();//外部要访问内部的成员,必须创建对象
	}

}

1.2 成员内部

按照内部中定义的位置不同,可以分为如下两种形式

  • 的成员位置:成员内部
  • 的局部位置:局部内部

成员内部外界如何创建对象使用呢?

  • 格式:外部名.内部名 对象名 = 外部对象.内部对象;
java">/*测试*/
public class InnerDemo {
	public static void main(String[] args) {
		Outer.Inner io = new Outer().new Inner();
		io.show();
	}
}

如果内部中使用private修饰的话,如何访问

java">public class Outer {
	private int num = 10;
	private class Inner{
		public void show(){
			System.out.println(num);//内部可以直接访问外部的成员,包括私有
		}
	}
	public void method(){/*在method方法中创建了这个内部的对象,并调用了它的方法
	然后在测试中,只需要创建外部的对象,调用method方法就可以,就可以间接的访问了
	内部中的方法了*/
		Inner i = new Inner();
		i.show();//外部要访问内部的成员,必须创建对象
	}
}
-------------------
public class InnerDemo {
	public static void main(String[] args) {
		/*Outer.Inner io = new Outer().new Inner();
		io.show();*/
		Outer outer = new Outer();
		outer.method();
	}
}    

1.3 局部内部

局部内部的是在方法中定义的,所以外界是无法直接使用的,需要在方法内部中创建内部对象并使用,该可以直接访问外部的成员,也可以访问该方法的局部变量。

java">public class Outer{
    private int num = 10;
    
    public void method(){
        int num2 = 33;//定义一个局部变量
        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[] arsg){
        Outer o = new Outer();
        o.method();
    }
}

1.4 匿名内部

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

  • 格式:
java">new 名或者接口(){
  		重写方法;  
};//看作成匿名对象
  • 范例:
java">new Inner(){
    	public void show(){
            
        }
};

本质:是一个继承了一个或者实现了该接口的子匿名对象

java">/*
	这是匿名内部,需要的接口
* */
public interface Inter {
	void show();
}
---------------------
public class Outer {
	public void method(){
		/*new Inter(){
			@Override
			public void show() {
				System.out.println("匿名内部!");
			}
		};*/
	/*	new Inter(){
			@Override
			public void show() {
				System.out.println("匿名内部!");
			}
		}.show();
		new Inter(){
			@Override
			public void show() {
				System.out.println("匿名内部!");
			}
		}.show();*/
		Inter i = new Inter(){
			@Override
			public void show() {
				System.out.println("匿名内部!");
			}
		};
		i.show();//多次调用
		i.show();
	}
}
------------------------
public class OuterDemo {
	public static void main(String[] args) {
		Outer o = new Outer();
		o.method();
	}
}
------------
匿名内部!
匿名内部

1.5 匿名内部在开发中的使用

java">/*
	跳高接口
*/
public interface Jumpping{
    	void jump();
}
java">/*
	接口操作,里面有一个方法,方法的参数就是接口名
*/
public class JumppingOperator{
    public void method(Jumpping j){//方法的形参是接口名,其实要的是该接口的实现对象
        j.jump();
    }
}
java">/*
	测试
*/
public class JumppingDemo{
    public static void main(String[] arsg){
        //需求:创建接口操作的对象,调用method方法
    }
}
java">/*
	接口
 */
public interface Jumpping {
	void jump();
}
------------------------
/*
	接口操作,
 */
public class JumppingOperator {

	public void method(Jumpping j){//方法的形参是接口名,其实要的是该接口的实现对象
		j.jump();
	}
}    
-------------------
/*
		接口的实现Cat
 */
public class Cat implements Jumpping {
	@Override
	public void jump() {
		System.out.println("猫可以跳高了");
	}
}
------------------
/*
	测试
 */
public class JumppingDemo {
	public static void main(String[] args) {
		//创建接口操作的对象,调用method方法
		JumppingOperator jo = new JumppingOperator();
		Jumpping j = new Cat();
		jo.method(j);


		Jumpping j2 = new Dog();
		jo.method(j2);

		jo.method(new Jumpping() {
			@Override
			public void jump() {
				System.out.println("匿名内部直接添加");
			}
		});

		jo.method(new Jumpping() {
			@Override
			public void jump() {
				System.out.println("猪都可以起飞了!");
			}
		});
	}
}    

http://www.niftyadmin.cn/n/1367857.html

相关文章

JavaSE七(形参与返回值)

文章目录1.形参和返回值1.1 类名作为形参和返回值1.2 抽象类名作为形参和返回值1.3 接口名作为形参和返回值1.形参和返回值 1.1 类名作为形参和返回值 方法的形参是类名,其实需要的是该类的对象 public class Cat {public void eat(){System.out.println("猫…

JavaSE八(内部类)

文章目录内部类1.1 内部类概述1.2 成员内部类1.3 局部内部类1.4 匿名内部类1.5 匿名内部类在开发中的使用内部类 1.1 内部类概述 内部类:就是在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类 内部类的定义格式&…

JavaSE九(日期类)

文章目录日期类案例:日期工具类Calendar 类概述Calendar的常用方法案例 二月天日期类 案例:日期工具类 需求:定义一个日期工具类(DateUtils),包含两个方法:把日期转化为指定格式的字符串;把字符串解析为指…

JavaSE十(异常)

文章目录异常1.1 JVM的默认处理方案1.2 异常处理1.3异常处理之try ... catch ...1.4 Throwable的成员方法1.8 自定义异常1.9 throw 和 throws的区别异常 1.1 JVM的默认处理方案 如果程序出了问题,我们没有做任何的处理,最终JVM会做默认的处理 把异常的…

JavaSE十一(集合,Collection,List)

文章目录集合1 Collection1.1 集合知识回顾1.2 集合类体系结构1.3Collection集合概述和使用1.4 Collection集合常用方法1.5 Collection集合的遍历1.6 集合的使用步骤1.7 案例 Collection集合存储学生对象并遍历2.List2.1List集合概述和特点2.2 List集合特有方法案例&#xff1a…

JavaSE十二(Set)

文章目录Set3.1 Set集合的概述和特点3.2 哈希值3.3 HashSet集合的概述和特点3.4 HashSet集合保证元素唯一性源码分析3.5 常见数据结构之哈希表案例:HashSet集合存储学生对象并遍历3.6 LinkedHashSet集合概述和特点3.7 TreeSet集合概述和特点3.8 自然排序Comparator的…

JavaSE十三(泛型)

文章目录泛型1.1 泛型概述1.2 泛型类1.3 泛型方法1.4泛型接口1.5 类型通配符1.6 可变参数1.7 可变参数的使用泛型 1.1 泛型概述 泛型:是JDK5之后引入的新特性,它提供了编译时类型安全检测机制,该机制允许编译时检测到非法的类型&#xff0c…

JavaSE十四(Map)

文章目录Map1.1 Map集合的概述和使用1.2 Map集合的基本功能1.3Map集合的获取功能1.4 Map集合的遍历(方式1)1.5 Map集合的遍历(方式2)1.6 案例:HashMap集合存储学生对象并遍历1.7 案例:HashMap集合存储学生对…