java基础学习(六)

为什么要有抽象:

1.为了解决方法重写时,子类(具体的存在)永远都不会去执行父类的方法体
2.父类使用new(初始化/实例化)不能创建出具体的存在

解决1:既然子类(具体的存在)永远都不会去执行父类的方法体,方法体可以省略不写,而没有方法体的方法,叫做抽象方法
解决2:解决1等同于解决2,因为抽象方法必须方在抽象类之中

抽象方法的定义格式:
	格式:访问修饰符 abstract 返回值类型 方法名();
	例如:public abstract void eat();
抽象类的定义格式:
	格式:访问修饰符 abstract class 类名{}
	例如:public abstract class Animal{}
特点:
抽象方法必须在抽象类中,抽象类中可以有实体方法
抽象类不能直接实例化(抽象类没有具体实例,实例化没有意义),除非在后面进行方法重写,构建匿名类
	抽象如何实例化?通过多态的方式,父类的引用指向子类的对象
抽象类的子类要么必须重写抽象类中所有抽象方法,要么是抽象类

成员特点:
	成员变量:可以有变量,可以有常量
	成员方法:可以有抽象可以有实体
	构造:有构造 但是不能实例化,用于子类初始化父类的数据

接口:

接口:为了方便管理 降低耦合性(属性和需要重写的方法分离)	
接口的定义格式:
	格式:访问修饰符 interface 接口名称{}
	例如:public 	interface PersonImpl
特点:接口只能被类实现
	接口可以被接口继承,单继承和多继承
	实现一个接口,要么重写接口中的所有抽象方法,要么就是抽象类
实现接口格式:访问修饰符 class(或者抽象类) 类名 implement 接口名称{}
		例如:public class Student implement PersonImpl{}
注意:接口之中通常书写抽象方法
     接口中的抽象方法可以不写public abstract;
     接口中非static修饰的方法默认都是抽象方法

匿名对象

匿名对象:就是没有名称的对象:
格式:new 类名(参数列表);
例如:new Scanner(System.in);
注意:匿名对象只能使用一次

匿名类:

前提:
	1.继承
	2.方法重写
例如:抽象父类Animal,Animal中有抽象方法eat
	Aniaml aniaml=new Aniaml(){
		public void eat(){
			System.out.println("匿名的对象在吃东西");
		}
	};

注意:重建一个匿名类时,只能改写抽象类或接口中声明后的方法

public abstract class Animak {
     
    public abstract void show();
}
public class Test {
     
    public static void main(String[] args) {
     
        Animak animak=new Animak(){
     
            public void show(){
     
                System.out.println("这是匿名类");
            }

            public void test(){
     
                System.out.println("zhe");
            }//原先不存在,不可以调用
        };
        animak.show();
    }
}

java入门基础学习(一)
java入门基础学习(二)
java入门基础学习(三)
java入门基础学习(四)
java入门基础学习(五)
java进阶之常见对象(一)
java进阶之常见对象(二)
java进阶之冒泡排序
java进阶之选择排序
java进阶之面向对象(封装)
java进阶之面向对象(代码块、继承)

你可能感兴趣的:(java基础学习全套,抽象类,多态,编程语言)