java学习笔记41

面向对象

抽象类

package oopzong.oop.oop7;
//abstract 抽象类 : 类 extends :单继承     (接口可以多继承)
public abstract class Action {
   //约束~有人帮我们实现
   //abstract,抽象方法,只有方法名字,没有方法的实现
   public abstract void doSomething();
22
   //不能new这个抽象类,只能靠子类去实现它:约束!
   //抽象类中可以写普通的方法~
   //抽象方法必须在抽象类中
   //抽象的抽象:约束~
   
   
   
}



package oopzong.oop.oop7;
//抽象类的所有方法,继承了它的子类,都必须要实现它的方法~除非子类也是抽象类
public abstract class A extends Action {
   @Override
   public void dosomething() {

  }
}

思考 抽象类不能new对象存在构造器吗?

(抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法。)

 

抽象类存在的意义是什么

(抽象出来~提高开发效率)

 

 

接口

package oopzong.oop.oop8;
//interface 定义的关键字   接口都需要有实现类
public interface UserService {
   //常量public static final
   //public static final int age = 99;
   
   //接口中的所有定义的方法其实都是抽象的 public abstract可以不写
  // public abstract void run(String name);
   void add(String name);//增
   void delete(String name);//删
   void update(String name);//改
   void query(String name);//查
   
}






package oopzong.oop.oop8;
public interface TimeService {
   void timer();
}





package oopzong.oop.oop8;
//抽象类:extends
//类可以实现接口implements 接口
//实现了接口的类,就需要重写接口中的方法

//利用接口实现多继承
public class UserServiceImpl implements UserService,TimeService {
   @Override
   public void add(String name) {

  }

   @Override
   public void delete(String name) {

  }

   @Override
   public void update(String name) {

  }

   @Override
   public void query(String name) {

  }

   @Override
   public void timer() {

  }
}

作用

1.约束

2.定义一些方法,让不同的人实现

3.常量public static final

4.方法 public abstract

5.接口不能被实例化,接口中没有构造方法

6.可以实现多个implements

7.实现了接口的类,就需要重写接口中的方法

 

内部类

内部类就是在一个类的内部在定义一个类,比如,A类中定义一个B类,那么B类相对于A类来说就称为内部类,而A类相对于B类来说就是外部类了

 

1.成员内部类

2.静态内部类

3.局部内部类

4.匿名内部类

 

package oopzong.oop.oop9;

//Outer外部
public class Outer {
   private int id =10;
   public void out(){
       System.out.println("这是外部类的方法");
  }
   //Inner内部
   public class Inner{
       public void in(){
           System.out.println("这是内部类的方法");
      }
       //获得外部类的私有属性
       public void getID(){
           System.out.println(id);
      }

  }
   
   
   package oopzong.oop.oop9;

public class Application {
   public static void main(String[] args) {
       Outer outer = new Outer();
       //通过外部类来实例化内部类outer.new Inner
       Outer.Inner inner = outer.new Inner();
       inner.in();
       inner.getID();
  }
}
   
   得到:
       这是内部类的方法
       10

 

静态(无法得到私有属性)

//Outer外部
public class Outer {
  private int id =10;
  public void out(){
      System.out.println("这是外部类的方法");
  }
  public static class Inner{
      public void in(){
          System.out.println("这是内部类的方法");
      }
       
  }
   

}

 

不是内部,是并行的

package oopzong.oop.oop9;

//Outer外部
public class Outer {
 
}
//一个java类中可以有多个class类,但只能有一个public class
class A{
  public static void main(String[] args) {
       
  }
}

 

 

局部内部类

package oopzong.oop.oop9;

//Outer外部
public class Outer {

  //局部内部类
  public void method(){
      class Inner{
           
      }
  }

}

 

没有名字的类

package oopzong.oop.oop9;

public class Test {
   public static void main(String[] args) {
       //没有名字初始化类,不用将实例保存到变量中
       new Apple().eat();
       new UserService(){
           @Override
           public void hello() {
               
          }
      };
  }

}

class Apple{
   public void eat(){
       System.out.println("1");
  }
}
interface UserService{
   void hello();
}
posted @ 2022-10-25 15:00  新人用户  阅读(190)  评论(0)    收藏  举报