java学习笔记Day4
抽象类
-
没有方法体的方法叫做抽象方法,必须用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 这个包解压后的文件内容
上一篇: java学习笔记day4
下一篇: JAVA学习笔记DAY4