(1)abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。 (2)在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法。 (3)实现抽象类必须实现其中的所有抽象方法(非抽象方法)。抽象类中可以有非抽象方法。 (4)抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
2、抽象类实现
public abstract class person {
String property ="属性";
public abstract void run_01();
void run_02(){
System.out.println("程序运行");}}
class Myperson extends person{
@Override
public void run_01(){}}
public interface InterFace {
public static final String PROPERTY_01 ="属性";
String PROPERTY_02 ="属性"; //省略关键字。
public abstract void run_01();
void run_02(); //默认接口成员都是public,且public abstract可以省略。
}
class MyInterFace implements InterFace{
@Override
public void run_01(){}
@Override
public void run_02(){}}
抽象类和接口联系及区别
abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是public static final的,不过在 interface中一般不定义数据成员),所有的成员方法默认都是public abstract的。
//外部类
public class Outer {
private String property ="属性";
public String getProperty(){return property;}
public void setProperty(String property){
this.property = property;}
public void out(){
System.out.println("这是外部类");}
//内部类,相当于类中属性
public class Inner{
public void in(){
System.out.println("这是内部类");}
//内部类获取外部类私有属性
public void getProperty(){
System.out.println("获得外部类属性"+property);}}
public static void main(String[] args){
//外部类实例化对象
Outer out = new Outer();
//通过外部类对象调用并创建内部类对象
Outer.Inner in= out.new Inner();
in.getProperty();}}
(2)局部内部类(局部类)
在方法中实例化对象,仅在本方法有效
//外部类
public class Outer {
private String property ="属性";
public void out(){
System.out.println("这是外部类");}
public void Inner(){
//局部内部类,相当于方法中属性
class Inner{
public void out(){
System.out.println("这是内部类");}
public void getPorperty(){
System.out.println("获取外部类私有变量"+property);}}
//在方法中实例化对象,仅在本方法有效
Inner in= new Inner();
in.getPorperty();}
public static void main(String[] args){
//外部类实例化对象
Outer out = new Outer();
out.Inner();}}
//外部类
public class Outer {
private String property ="属性";
public void out(){
System.out.println("这是外部类");}
public static void main(String[] args){
//外部类实例化对象,并创建匿名内部类,匿名内部类继承外部类,用于重写外部类(父类)方法,常见于抽象类和接口
Outer out = new Outer(){
@Override
public void out(){
System.out.println("这里是匿名内部类");}};
out.out();}}
(4)lmabda表达式(内部类特殊简化)
只能用于函数式接口
public class Outer {
public static void main(String[] args){
//lmabda表达式
InterFace_01 interface_01 =()->System.out.println("这里是lmabda表达式");
interface_01.run();
InterFace_02 interface_02 =(str)->System.out.println("这里是lmabda表达式:"+str);
interface_02.run("你好");}}
//函数式接口,只含有一个抽象方法
interface InterFace_01{
public abstract void run();}
interface InterFace_02{
public abstract void run(String str);}