继承和接口

2020-10-18  本文已影响0人  山不转人自转

继承(class 子类 extends 父类)
Override:方法重写只改动方法体。

继承不能继承父类私有属性及私有方法,构造方法(构造方法的名字和类名一样所以无法继承)。
但是在继承父类后子类 子类的构造方法都有一句默认的super();

super和this的含义:
super:为父类的引用
this:为当前对象的引用

java的继承只能继承一个,但接口可以接好多个(可以理解为被继承的是亲爹,被实现的接口就是干爹)。

所有类默认继承Object。

抽象类(abstract):抽象方法是不含方法体的。

如果继承的父类是抽象类,必须重写所有抽象方法,否则我,该子类必须定义为抽象类。

我们把重写抽象类的过程称为实现方法。

接口:

public interface 接口名称 {     
抽象方法     
abstract void 抽象方法名;
默认方法      
public default void method() {             }   
静态方法     
public static void method2() {             }
私有方法
 private void method(){       }
 }

子类实现接口:class 类名 implements 接口名

方法和变量都是遵守接近原则。

与类继承不同 ,一个接口可以继承多个接口。

接口中只能定义常量不能定义其他变量;

public static final int num=10;
接口中默认加上了public static final修饰;
所以int num=10;就行了。

多态

父类类型 变量名 = new 子类对象; 变量名.方法名();

注意:如果子类要调用的方法有而父类没有则需要向下转型:如:
Animal a = new Cat();
Cat c =(Cat) a;

final 关键字:常量

类:被修饰的类,不能被继承。
方法:被修饰的方法,不能被重写。
变量:被修饰的变量,不能被重新赋值。

权限修饰符:

public>protected>default>private

匿名内部类

前提:匿名内部类必须继承一个父类或者实现一个父接口。
格式:

new 父类名或者接口名(){    
 // 方法重写     
  @Override     
  public void method() {          
    方法体
   }
};

当接口做为方法参数和返回类型时

//随便获取一个可以游泳的对象即可     
public static Swimable getSwimableObj(){                  
    SwimStudent ss=new SwimStudent();                  
    SwimTeacher st=new SwimTeacher();        
    //返回的是SwimTeacher 的对象    
    return st;     
}

Lambda表达式:

面向对象的思想:

做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.

//正常写法
Comparator<Person> comp = new Comparator<Person>() {             
        @Override             
        public int compare(Person o1, Person o2) {                 
        return o1.getAge() ‐ o2.getAge();            
     }        
 };
 Arrays.sort(array, comp); // 第二个参数为排序规则,即Comparator接口实例 
//Lambda
Arrays.sort(array, (Person a, Person b) ‐> {            
        return a.getAge() ‐ b.getAge();            
     });

Lambda省略规则

  1. 小括号内参数的类型可以省略;
  2. 如果小括号内有且仅有一个参,则小括号可以省略;
  3. 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。
    如 invokeCook(() ‐> System.out.println("吃饭啦!"));
匿名内部类
new Start(new Task() {             
    @Override             
    public void task() {                 
    System.out.println("开启任务啦!");
    }
}).run();
转换为:Lambda
new Start(() ‐> System.out.println("使用lambda表达式开启任务!")
).run();
上一篇 下一篇

猜你喜欢

热点阅读