欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java学习笔记Day4

程序员文章站 2022-07-14 18:59:16
...

抽象类

  • 没有方法体的方法叫做抽象方法,必须用abstract

  • 抽象类不一定有抽象方法

  • 有抽象方法的类一定是抽象类

abstract class A{
    abstract public void f():
}
class B extends A{
    public void f(){
        System.out.println("bbb");
    }
}
public class T{
    public static void main(String[] args){
        A aa;//可以定义一个抽象类的引用,但不可以定义一个抽象类的引用
        aa=bb;
        aa.f();//实现多态
    }
}

final

* 
  • 可以修饰整个类

表示该类不能被继承

public final class A{}//public和final可互换
  • 可以修饰类中的若干个属性

表示常变量,必须赋初值,并且只能被赋一次值,默认值不算真正的赋值

初始化两种方法:
在定义成员变量的同时初始化
在类中所有的构造函数中初始化

  • 可以修饰类中的若干个方法

表示该方法可以被子类继承,但不可以被子类重写

接口

  • 接口中定义的属性必须是public static final的,定义的方法是public abstract可省略

  • 接口定义的属性在类里不能被更改

  • 接口可以继承多个接口

  • 如果一个类只 实现了一个接口的部分方法,则该类必须要声明为抽象类

  • 一个类可以在继承一个父类的同时实现一个或多个接口但extends关键字必须在implements之前

  • 不可以new接口对象,但可以定义一个接口引用类型的变量并将其指向实现接口的对象,达到多态的目的

局部变量不初始化会报错,属性和形参不初始化会有默认值

interface It{
    void f();
}
class A implements It{
        public void f(){  //前面必须写public ,不能权限过低
        System.out.println("aaa");
    }
        public void g(){
    }
}
class D{
    public static void main(String[] args){
       It it;//不出错
        it=new A();
        it.f(); 
        it.g();//error,父类接口不能访问子类特有方法
    }
}

面向对象特点

封装:

访问控制符

  • 只有private的不能在外部访问

  • 类内部访问透明

构造方法
定义:名字和类名一样,无返回值

注意事项:

  • 一个类对象只能调用一个构造方法

  • 一个类至少有一个构造方法

  • 如果自己定义了构造方法,编译器将不再提供默认的构造方法

this: 一个对象只含有属性的空降,n个对象公共一份方法的拷贝
static

继承
  • java允许单继承

  • 私有成员无法被继承

  • 重写:方法名和参数列表和返回值必须一致,访问权限不能过低

多态

package zhangsan.lisi;
  • package语句必须得是第一条语句

  • package zhangsan.lisi;表示:把该文件中所有类放在zhangsan.lisi这个包中,并且文件中所有的类真正名字将是包名和类名的组合

  • 类名将变成zhangsan.lisi.类名

  • 编译时建议使用javac -d . 类名.java

set classpath 查看=可设置classpath变量

不同包类的相互访问

package zhangsan.lisi;
public class A{
    public void f(){
        System.out.println("aaa");
    }
}

package com.ruide;
import zhangsan.lisi.*;
class B{
    public static void main(String[] args){
        //zhangsan.lisi.A aa=new zhangsan.lisi.A();
        A aa=new A();
        aa.f();
    }
}

两个文件一起编译 javac -d. A.java B.java

  • 在不同包没有任何关系的两个类,只有public类的public成员才可以被另一个包中的类访问

  • 在不同包中有继承关系的两个类,只有public类的public成员和public类的protected成员可以被另一个包中的子类在内部使用,但是在子类的外部,通过子类对象名只能访问父类的public成员

package zhangsan.lisi;
public class A{
    public void g(){
        System.out.println("gggg");
    }
    protected void b(){
        System.out.println("bbbb");
    } 
}


package com.ruide;
import zhangsan.lisi;
class B extends A{
    public void f(){
        g();
        b();//在子类内部可以访问从另一个包继承过来的父类的public和protected成员
    }
}
class M{
    public static void main(String[] args){
        B bb=new B();
        bb.b();//
    }
}

生成jar包

jar cvf T.jar*

  • cvf 参数
  • T jar包名字
  • *当前目录下的全部文件

jar包双击打不开,用压缩工具
jar -tf c.jar 这个包解压后的文件内容