学习java的第12天

01. 抽象类和接口的区别

  • 成员区别
    • 接口
      • 成员变量:只能是常量
      • 构造器:无
      • 成员方法:只能是抽象方法
    • 抽象类
      • 成员变量:可以是常量,也可以是变量
      • 构造器:有
      • 成员方法:可以是抽象方法,也可以是普通方法
  • 关系区别
    • 类与类 :继承
    • 类与接口: 实现
    • 接口与接口: 继承
  • 设计观念
    • 接口
      • 多用于功能扩展
    • 抽象类
      • 多用于共性的抽象功能

02. 接口练习之动物园

  • 代码实现

    • Animal.java

      public abstract class Animal {
      	
      	
      	private String name;
      	private int age;
      	public Animal() {
      		super();
      	}
      	public Animal(String name, int age) {
      		super();
      		this.name = name;
      		this.age = age;
      	}
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      	public int getAge() {
      		return age;
      	}
      	public void setAge(int age) {
      		this.age = age;
      	}
      	
      	public abstract void eat();
      	
      	public void sleep() {
      		System.out.println("睡觉");
          }
      
      }
      
    • Dog.java

      public class Dog extends Animal {
      
      	
      	
      	public Dog() {
      		super();
      	}
      
      	public Dog(String name, int age) {
      		super(name, age);
      	}
      
      	@Override
      	public void eat() {
      		System.out.println("吃屎");
      	}
      
      
      }
      
    • Cat.java

      public class Cat extends Animal {
      	
      	
      
      	public Cat() {
      		super();
      	}
      
      	public Cat(String name, int age) {
      		super(name, age);
      	}
      
      	@Override
      	public void eat() {
      		System.out.println("吃鱼");
      	}
      }
      

03. 动物园之UML用例图

04. package关键字

  • 包的概述

    • 可以提供代码的维护性
    • 相当于是将java文件和class文件存储到指定的目录保存
  • 包的定义规则

    • 按照功能分
    • 按照模块分
  • package关键字

    • 定义包
    • 当一个类处于某一个包下,必须通过package关键字说明
  • 语法

    package 包名;
    
    public class 类名{
    
    
    }
    
  • 注意事项

    • package 包名;必须在第一行
    • 一个java文件中只能使用一个package

05. dos命令执行带包类

  • 编译

    javac 文件名.java
    
  • 运行

    java 全限定类名
    
    • 全限定类名 = 包名.类名
    • 在目标路径下,找包所对应的文件夹,再找class文件,如果都找到了就执行。

06. 不同包下类之间的访问

  • import关键字

    • 用于不同包下的类之间访问进行导包
  • 代码实现

    package com.lhf.demo1;
    
    import com.lhf.bean.Person;
    
    /**
     * import包导入测试类
     */
    
    
    public class Demo01_Package {
    	public static void main(String[] args) {
    		//ctrl + shift + o :整理包
    		Person person = new Person();
    		person.setName("张三");
    		person.setAge(18);
    		System.out.println(person.getName() + "," +person.getAge());
    	}
    
    }
    

07. 权限修饰符

  • 概述
    • 限定成员的一个作用范围
  • 总结
    • public:如果想要让成员在任何位置都可以使用
    • protected:如果想要让成员在子父类中都可以使用
    • 默认:如果想要让成员在同包下都可以适用
    • private:如果想要让成员在本类中可以使用

08. 匿名内部类

  • 概述

    • 就是一个简写的类
  • 语法

    new 接口名/类名(){
    	
    	重写方法;
    	
    }
    
  • 本质

    • 是类或接口的子类匿名对象
  • 好处

    • 省去了写具体子类麻烦

09. 匿名类的面试题

package com.lhf.demo1;

/**
 * 匿名内部类的面试题
 * @author 海锋
 *
 */
public class Demo03_Interface {
	interface Inter {
		void show();
	}

	 static class Outer {
		// 补齐代码
		public static Inter method() {
			return 	new Inter() {
				@Override
				public void show() {
					System.out.println("Hello World");
					
				}
			};
			
		}
	}

		public static void main(String[] args) {
			Outer.method().show();
		}
	}

10. API概述

  • 概述
    • application programming interface : 应用程序接口
    • 提供了一套类和方法,开发人员可以直接使用,而不需要关系它的源码
  • 注意事项
    • 开发人员使用“java.lang”包下的类时,无需导包

11. Object概述

  • 概述

    • Object类是类层次结构的根。每个类都是Object作为超类
    • 所有对象,包括数组,实现这个类的方法
  • 代码实现

    public static void main(String[] args) {
        Object obj = new Object();
        //运行时对象
        Class clazz = obj.getClass();
        System.out.println(clazz);
    
        A a = new A();
        Class clazz2 = a.getClass();
        System.out.println(clazz2);
    
    }
    

12.Object类的hashCode方法

  • 方法说明

    public int hashCode()
    
    • 返回一个对象的哈希码值
    • 相同对象的哈希码值相同,不同对象的哈希码值不同
  • 代码实现

    package com.lhf.demo1;
    
    import com.lhf.bean.Person;
    
    /**
     * Object中的hashcode()的应用
     * @author 海锋
     *
     */
    public class Demo06_Object {
    	public static void main(String[] args) {
    		Person per1 = new Person();
    		System.out.println(per1.hashCode());
    		Person per2 = new Person();
    		System.out.println(per2.hashCode());
    	}
    }
    
    
  • 注意事项

    • 想要让不同对象的哈希码值也相同,那么就需要子类重写hashCode方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值