Java SE从入门到放弃(十五)

阅读: 评论:0

Java SE从入门到放弃(十五)

Java SE从入门到放弃(十五)

文章目录

  • Java SE从入门到放弃(十五)之接口和内部类以及小结
    • 一、接口(interface)
      • 1. 对于接口的理解
      • 2. 接口的基本内容
      • 3. 代码体现
      • 4. 接口体现多态性
      • 5. 接口的匿名实现类、匿名对象
      • 6. java8中的新特性
    • 二、类的成员之五:内部类(InnerClass)
      • 1. 内部类的基本内容
      • 2. 成员内部类的使用
      • 3. 局部内部类的使用
      • 4. 关于内部类编译后生成的字节码文件
    • 三、面向对象的小结

Java SE从入门到放弃(十五)之接口和内部类以及小结

一、接口(interface)

1. 对于接口的理解



2. 接口的基本内容

   1. 接口,使用interface关键字来定义* 2. 接口,是与类并列的结构* * 3. jdk7及之前:接口中只能定义全局常量(public static final)和抽象方法(public abstract)。* 				常量的public static final可以省略* 				抽象方法的public abstract也可以省略* *   jdk8中: 接口中还可以定义静态(static)方法和默认(default)方法.*   jdk9中:接口中还可以定义私有(private)方法*   *   明确:接口中没有构造器!接口不可以实例化* * 4. 类与接口之间是实现关系:implements* 		类实现接口以后,如果实现了接口中的所有的抽象方法,则此类不是抽象类,可以实例化* 		如果实现类没有实现接口中的所有的抽象方法的话,则此类就是一个抽象类,不能实例化。	* 5. 类可以实现多个接口。比如:class Bullet extends Object implements Flyable,Attackable* 	* 6. 接口与接口之间是继承关系。而且是可以多继承的!

3. 代码体现

public class InterfaceTest {public static void main(String[] args) {System.out.println(Flyable.MAX_SPEED);
//		Flyable.MAX_SPEED = 4500;Plane p = new Plane();p.fly();Flyable f = p;//体现了接口的多态性method(p);}public static void method(Flyable f){f.fly();}
}interface Flyable{ //可以飞的接口//常量public static final int MIN_SPEED = 1;int MAX_SPEED = 7900;//第一宇宙速度//抽象方法public abstract void fly();void stop();
}interface Attackable{ void attack();
}class Plane implements Flyable{//Plane has a Flyable@Overridepublic void fly() {System.out.println("飞行员启动飞机飞行");}@Overridepublic void stop() {System.out.println("飞行员控制飞机停止飞行");} }abstract class Kite implements Flyable{ //Kite has a Flyable}class Bullet implements Flyable,Attackable,C{@Overridepublic void attack() {// TODO Auto-generated method stub}@Overridepublic void fly() {// TODO Auto-generated method stub}@Overridepublic void stop() {// TODO Auto-generated method stub}@Overridepublic void test1() {// TODO Auto-generated method stub}@Overridepublic void test2() {// TODO Auto-generated method stub}}//*************************************
interface A{void test1();
}interface B{void test2();
}interface C extends A,B{//接口的多继承}

4. 接口体现多态性

class Computer{public void transferData(USB usb){ //USB usb = new Flash();usb.start();System.out.println("usb设备开始进行数据的传输....");usb.stop();}
}interface USB{//常量:尺寸(略)//抽象方法public abstract void start();void stop();}class Flash implements USB{@Overridepublic void start() {System.out.println("U盘开始工作");}@Overridepublic void stop() {System.out.println("U盘结束工作");}}class Printer implements USB{@Overridepublic void start() {System.out.println("打印机开始工作");}@Overridepublic void stop() {System.out.println("打印机结束工作");}}

public class USBTest {public static void main(String[] args) {Computer c1 = new Computer();//1. 创建接口实现类的非匿名对象Flash flash = new Flash();c1.transferData(flash);}
}

5. 接口的匿名实现类、匿名对象

public class USBTest {public static void main(String[] args) {Computer c1 = new Computer();//1. 创建接口实现类的非匿名对象Flash flash = new Flash();c1.transferData(flash);//2. 创建接口实现类的匿名对象c1.transferData(new Printer());//3. 创建接口匿名实现类的非匿名对象USB usb1 = new USB(){@Overridepublic void start() {System.out.println("mp3开始工作");}@Overridepublic void stop() {System.out.println("mp3结束工作");}};c1.transferData(usb1);//4. 创建接口匿名实现类的匿名对象c1.transferData(new USB(){@Overridepublic void start() {System.out.println("手机开始工作");}@Overridepublic void stop() {System.out.println("手机结束工作");}});}
}

类似的:抽象类也有同样的使用

public class AbstractTest {public static void main(String[] args) {Student s1 = new Student();//创建了抽象类的匿名子类的对象Person p1 = new Person(){@Overridepublic void eat() {System.out.println("工人多吃肉!");}};//		Person p2 = new Person(){};}
}abstract class Person{public abstract void eat();public void sleep(){System.out.println("人睡觉");}
}class Student extends Person{@Overridepublic void eat() {}}

6. java8中的新特性

//从java8开始,可以在接口中定义静态方法和默认方法。
public interface CompareA {public static void method1(){System.out.println("CompareA:北京");}public default void method2(){System.out.println("CompareA:上海");}//如下的方法也是public,只是省略了default void method3(){System.out.println("CompareA:深圳 ");}default void method4(){System.out.println("CompareA:广州 ");}
}
public interface CompareB {default void method3(){System.out.println("CompareB:深圳 ");}
}
public class SuperClass {public void method4(){System.out.println("SuperClass:广州");}
}
public class SubClass extends SuperClass implements CompareA,CompareB{//重写了接口中的method2()方法public void method2(){System.out.println("SubClass:上海");}public void method3(){System.out.println("SubClass:深圳 ");}public void method4(){System.out.println("SubClass:广州");}public void method(){method4();//调用本类重写的方法hod4();//调用父类中被重写的方法hod3();//调用接口CompareA中的method3()hod3();//调用接口CompareB中的method3()}
}
public class InterfaceTest {public static void main(String[] args) {//知识点1:通过接口调用其内部的静态方法。但是实现类不可以调用其静态方法hod1();
//		hod1();//知识点2:通过实现类的对象调用接口中的默认方法SubClass sub = new SubClass();hod3();//知识点3:如果实现类重写了接口中的默认方法,则实现类对象调用的就是重写以后的方法hod2();//知识点4:如果实现类实现了两个以上的接口。而至少有两个接口中定义了同名同参数的默认方法,则实现类//必须重写此方法。否则,报异常--->接口冲突//知识点5:如果子类(或实现类)继承的父类和实现的接口中定义了同名同参数的方法,则不会报冲突问题//在子类(或实现类)没重写此方法的情况下,默认调用的是父类中的方法。--->类优先原则hod4();System.out.println();//知识点6:如何在实现类中调用接口的被重写的默认方法hod();}}

二、类的成员之五:内部类(InnerClass)

1. 内部类的基本内容

1. 理解:我们可以在一个类A的内部定义另一个类B,则此时类B就称为类A的内部类,类A就称为类B的外部类* * 2. 内部类的分类:成员内部类 (静态的、非静态的)   vs  局部内部类(方法内、代码块内、构造器内)* * 3. 成员内部类的理解:* 		3.1 成员内部类作为一个类:* 			> 内部可以定义属性、方法、构造器、代码块、内部类* 			> 可以被abstract修饰,表示不能实例化* 			> 可以被final修饰,表示不能被继承* * 		3.2 成员内部类作为外部类的成员:* 			> 可以被4种权限修饰符修饰* 			> 可以被static修饰* 			> 可以调用外部类的结构(主要是属性、方法)4. 关于内部类需要掌握的三个方面:* 	 > 如何创建静态的和非静态的成员内部类的对象* 	 > 如何在内部类中调用外部类的成员* 	 > 局部内部类在开发中的体现

2. 成员内部类的使用

 * 	 > 如何创建静态的和非静态的成员内部类的对象* 	 > 如何在内部类中调用外部类的成员
class Person{String name = "mmm";int age;//成员内部类static class Dog{public void shout(){System.out.println("汪~汪~");}}class Bird{String name = "麻雀";public void show(String name){System.out.println(name);//黄鹂System.out.println(this.name);//麻雀System.out.println(Person.this.name);//mmm}public void sing(){System.out.println("鸟儿在歌唱");eat();System.out.println(age);//Person.this.age}}public void show(){System.out.println("name : " +name + ", age : " + age);}public void eat(){System.out.println("人吃饭");}}
public class OuterClass {public static void main(String[] args) {//创建静态的成员内部类的对象Person.Dog dog = new Person.Dog();dog.shout();//创建非静态的成员内部类的对象Person p1 = new Person();p1.age = 12;Person.Bird bird = p1.new Bird();bird.sing();bird.show("黄鹂");}
}

3. 局部内部类的使用

//局部内部类在开发中的体现
public class OuterClass1 {public void method(){//局部内部类//此种情况在开发中很少见class A{}}//返回接口实现类的对象public Comparable getComparable(){//方式一:声明一个接口的实现类
//		class MyComparable implements Comparable{
//
//			@Override
//			public int compareTo(Object o) {
//				return 0;
//			}
//			
//		}
//		return new MyComparable();//方式二:创建接口的匿名实现类的匿名对象return new Comparable(){@Overridepublic int compareTo(Object o) {return 0;}};/** * button.setOnClick(new ClickListener(){* 		public void onClick(){* 			//当点击按钮时,希望触发的操作* 		}* });* * * */}}

4. 关于内部类编译后生成的字节码文件

对应的类为:

class Person{String name = "mmm";int age;//成员内部类static class Dog{public void shout(){System.out.println("汪~汪~");}}class Bird{String name = "麻雀";public void show(String name){System.out.println(name);//黄鹂System.out.println(this.name);//麻雀System.out.println(Person.this.name);//mmm}public void sing(){System.out.println("鸟儿在歌唱");eat();System.out.println(age);//Person.this.age}}public void show(){System.out.println("name : " +name + ", age : " + age);}public void eat(){System.out.println("人吃饭");}//********************************public void method(){//局部内部类class A{}}{//局部内部类class A{}}public Person(){//局部内部类class C{}}}

三、面向对象的小结

  1. 类与对象的理解和关系

  2. 面向对象编程的思路:

    • 创建类
    • 创建对象
    • 通过"对象.属性"或"对象.方法"的方式进行功能的调用

    声明:针对于工具类等结构,通常内部都是定义静态的属性或方法,直接通过类进行调用。

  3. 主线一:类的内部结构

    1. 属性
      1. 属性 vs 局部变量
    2. 方法(最重要)
      1. 方法的声明
      2. 方法的重载
      3. 方法的值传递机制
      4. 递归方法
      5. 方法的重写
    3. 构造器
      1. 创建对象、初始化对象的属性
      2. 构造器可以重载
      3. 构造器内部可以使用this(形参列表) 或 super(形参列表)
    4. 代码块
      1. 作用:初始化类或对象的基本信息
      2. 分类
    5. 内部类
      1. 了解
      2. 成员内部类的使用
  4. 主线二 :面向对象的三大特征

    1. 封装性
      1. 狭义:private属性 public的getter()setter()
      2. 广义:体现为4种权限修饰符
    2. 继承性
      1. 类的继承性:单继承
      2. 接口的继承性:多继承
    3. 多态性(难点)
      1. 子类对象的多态性
  5. 主线三:关键字的使用

    1. this

    2. import

    3. package

    4. super

    5. static

    6. final

    7. abstract

    8. interface

  6. 属性

    1. 属性 vs 局部变量
  7. 方法(最重要)

    1. 方法的声明
    2. 方法的重载
    3. 方法的值传递机制
    4. 递归方法
    5. 方法的重写
  8. 构造器

    1. 创建对象、初始化对象的属性
    2. 构造器可以重载
    3. 构造器内部可以使用this(形参列表) 或 super(形参列表)
  9. 代码块

    1. 作用:初始化类或对象的基本信息
    2. 分类
  10. 内部类

    1. 了解
    2. 成员内部类的使用
  11. 主线二 :面向对象的三大特征

    1. 封装性
      1. 狭义:private属性 public的getter()setter()
      2. 广义:体现为4种权限修饰符
    2. 继承性
      1. 类的继承性:单继承
      2. 接口的继承性:多继承
    3. 多态性(难点)
      1. 子类对象的多态性
  12. 主线三:关键字的使用

    1. this

    2. import

    3. package

    4. super

    5. static

    6. final

    7. abstract

    8. interface
      如果这些对你有帮助的话,可不可以帮我一键三连呢?

本文发布于:2024-02-01 04:01:01,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170673126333703.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:入门   Java   SE   十五
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23