Java学习之面向对象编程-3

面向对象编程-3

static关键字详解

1.静态属性与非静态属性

package com.oop.demo08;

public class Student {
   
   public int age;//非静态属性
   public static String name;//静态属性

   public static void main(String[] args) {
       Student s = new Student();
       //非静态属性需要new 一个对象才能调用
       System.out.println(s.age);
       //静态属性可以直接用类调用
       System.out.println(Student.name);
  }
}

2.静态方法与非静态方法

package com.oop.demo08;

public class Student {

   public void run(){//非静态方法

  }
   public static void go(){//静态方法

  }

   public static void main(String[] args) {
       Student s = new Student();
       s.run();//需要实例化对象后才能调用非静态方法
       Student.go();//用类直接调用
       go();//本类中直接写方法
  }
}

3.静态代码块

类一加载直接执行,最早

只执行一次

package com.oop.demo08;

public class Person {
{
   //匿名代码块:用来赋初始值
   System.out.println("匿名代码块");
}
static {
   //静态代码块,类一加载直接执行,最早,只执行一次
   System.out.println("静态代码块");
}
public Person(){
   System.out.println("构造方法");
}

   public static void main(String[] args) {
       Person p=new Person();
       System.out.println("=========");
       Person p2=new Person();
  }
}

执行结果

静态代码块
匿名代码块
构造方法
=========
匿名代码块
构造方法

4.导入包

package com.oop.demo08;
//静态导入包
import static java.lang.Math.random;
import static java.lang.Math.PI;
public class Test {

public static void main(String[] args) {
   System.out.println(Math.random());//不导入包时,需要用类.方法 来调用方法
   System.out.println(random());//导入包时,直接调用方法
   System.out.println(PI);
}
}

注意:当类有final修饰符时,不能被继承

抽象类

1.抽象类、抽象方法的关键词:abstract

package com.oop.demo09;
//抽象类
public abstract class Action {

   //抽象方法:只有方法的名字,没有方法的实现
   public abstract void go();
}

2.A类要继承抽象类Action

  • 重写实现抽象类的方法

package com.oop.demo09;

public class A extends Action{
   @Override
   public void go() {//重写抽象类的方法

  }
}
  • A也成为抽象类,A、Action的方法由继承A的子类实现

package com.oop.demo09;

public abstract class A extends Action{

  }
}

3.抽象类的特点

01.不能new这个抽象类,只能靠子类去实现它 Action' is abstract; cannot be instantiated

02.抽象类中可以写普通方法

03.抽象方法必须写在抽象类中

04.抽象类只能被继承

4.抽象类存在构造器吗?

每个类,包括抽象类,都必须有一个构造函数

对象是构造的,不调用构造函数就不能建立一个新的对象

5.抽象类存在的意义

抽象类把设计和实现分离开,抽象类和实现方法不干扰

接口

1.接口:只有规范,定义的是一组规则

声明接口的关键字:interface

package com.oop.demo10;

//接口
public interface UserService {
   //接口中定义的方法默认为 public static final
   int age=99;
   
   //接口中的方法不能写实现
   //接口中定义的方法默认为 public abstract
   void add(String name);
}

2.接口的继承 implements

package com.oop.demo10;

public interface  TimerService {
   void timer();
}
package com.oop.demo10;

//类可以实现接口 implements 接口,但要重写接口的方法
public class UserServiceImpl implements UserService,TimerService{//接口可以实现多继承
   @Override
   public void add(String name) {
  }
   @Override
   public void timer() {
  }
}

3.接口的作用

01.定义一些方法,让不同的类实现

02.接口中定义的方法默认为 public static final

03.接口中定义的方法默认为 public abstract

04.接口没有构造方法,因此不能被实例化

05.implements 可以实现继承多个接口

06.在类中implements接口时,必须重写接口的方法

找了篇更能加深理解的博客: 抽象类与接口的详解区别

 

posted @ 2021-02-26 16:20  xiuga  阅读(66)  评论(0)    收藏  举报