JAVA构造方法,类的继承第四章末五章处

 面试题

抽象类和接口有什么共同点和不同点?

如果两个对象不一样那他们的hash code一定不同?

错误 小概率相同

如果两个对象的hash code不同 对象一定不同

如果重写equals需要注意什么?

重写equals一定要重写hash code方法

为什么重写hash code?

因为使用hash map(是一个数据结构) 需要equals和hash code配合计算

如何在hash map中配合工作?

key值判断相等需要用到equals()

hashmap存储的时候需要用到hashcode()

key一样的对象会根据hashcode分配到同一个桶同一个数组单元

装箱和拆箱?

基本类型转包装类交装箱 包装类转基本类型叫拆箱

什么是128陷阱?

在-128--127中间输出为true 超出就位false

 Integer, float, long, double, short, byte, character, void, boolean都是这样的

为了节省内存在这个范围内会出现一个自己的常量池 指向一个地址所以会true超出范围 变为false

使用intValue()进行比较 拆箱比较

public class Test8{

public static void main(String[] aaa){

Integer a = 5211314;

Integer b = 5211314;

System.out.println(a.intValue()==b.intValue());

}

}

使用包的主要原因是确保类名的唯一性。假如两个程序员不约而同地建立了 Employee 类。

Java会出现出现重名类 通过包来区分

包的引入

  • 第一种方式是在每个类名之前添加完整的包名。 例如:
     java.tiie.LocalDate today = java.tine.Local Date.now();

  • 更简单且更常用的方式是使用 import 语句。import 语句是一种引用包含在包中的类的简明描述。一旦使用了 import 语句,在使用类时,就不必写出包的全名了。可以使用 import 语句导人一个特定的类或者整个包。import 语句应该位于源文件的顶部(但位于 package 语句的后面)。例如, 可以使用下面这条语句导人 java.util 包中所有的类。
    import java.util .*;

静态包导入后一直存在

Person类叫父类 超类 基类

Son1 叫 子类 派生类

子类执行时父类一定优先执行 子类执行继承父类的全部

子类和父类定义一样的东西时 子类执行时父类的东西会消失 父类被覆盖

public class Person{

public Person(){

System.out.println("我是构造方法");

}

public void m1(){

System.out.println("我是父类Person");

}

public int age = 9;

}

public class Son1 extends Person {

public void m1(){

System.out.println("我是子类Son1");

}

}
public class Test8{

public static void main(String[] aaa){

Son1 xx = new Son1();

System.out.println(xx.age);

xx.m1();

}

}

子类调用父类的与自己重复的方法用super.m1();就是子类构造器调用父类加super()

多态

父类的引用可以指向子类的值的地址

 

有一个用来判断是否应该设计为继承 关系的简单规则, 这就是“ is-a” 规则,它表明子类的每个对象也是超类的对象。

一个类只能有一个父类

一个父类有好多派生类

object是所有派生类的父类 除了他派生类就只有一个父类

 

  • equals()

比较两个值的地址是否是同一个地址

字符串当中比较两个字符串的值是否相等

String类里对equals重写了

==基本类型比较值

引用类型比较地址

  • getClass()

获取类信息

  • notify()

唤醒一个线程

  • notifyAll()

唤醒全部进程

  • wait()

让当前线程进入等待队列 从就绪队列进入

Final 

 强制类型转换

满足祖先类引用=子孙后代类的堆中值的地址

判断是否是当前类或者是子孙后代类的对象

 

抽象类

抽象类去定义本身是父类 有子类去实现它

每个动物都会移动 每种动物之间移动方式不一样自己去实现

抽象类的派生类想要继承派生类必须具备抽象类定义的每个功能

public class PersonTest{
   public static void main(String[] args){
          Person[] people = new Person[2];

          people[0] = new Employee("Harry Hacker",20000,1919,10,1);
          people[1] = new Student("Harry Hacker","computer science");

          for(Person p:people){
          System.out.println(p.getName()+","+p.getDescription());
        }
    }
}

 

public abstract class Person{
   
  public abstract String getDescription();
                private String name;
             
              public Person(String name){
                 this.name = name;
              }
             public String getName(){

                return name;
 }
}
public class Student extends Person
{
  private String major;
public Student(String name , String major)
{
   super(name);

  this.major = major;
}
  public String getDescription()
{
return "a student majoring in "+major;
}
}
import java.time.*;
public class Employee extends Person{
           private double salary;
           private LocalDate hireDay;
public Employee(String name , double salary , int year, int month, int day){
           super(name);
           this.salary=salary;
           hireDay = LocalDate.of(year,month,day);
         }

     public double getSalary(){
       return salary;
}
     public LocalDate getHireDay(){
       return hireDay;
}
    public String getDescription(){
         return String.format("an employee with a salary of $%.2f", salary);
  }
public void raiseSalary(double byPercent)
 {
   double raise = salary * byPercent/100;
   salary+=raise;
}
}

散列码

 是由对象导出的一个整型值。散列码是没有规律的。如果 x 和 y 是 两个不同的对象, x.hashCode( ) 与 y.hashCode( ) 基本上不会相同。

 

因为equals值重写了hash code也就跟着重写了 String比较的是值所以s和t散列码相等

 toString

 

泛型

广泛代表所有类型

public class Arr{

public E a;

}

public class Test8{

public static void main(String[] aaa){

Person x=new Person();

x.age = 20;

Arra1 = new Arr<>();

a1.a = x;

System.out.println(a1.a);

Arra2 = new Arr<>();

a2.a = "大江户";

System.out.println(a2.a);

Arr a3 = new Arr<>();

a3.a = new int[]{1,2,3,4};

System.out.println(a3.a[0]);

}

}

参数数量可变

public class Test8{

public static void main(String[] aaa){

m1("宋宇");

m1("212121");

m1("123456");

m1("11111");

}

public static void m1(String ... a){

for(int i=0;i

System.out.println(a[i]);

}

}

}

枚举类指定实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值