包
开发中,我们会遇到大量同名的类,通过包我们很容易解决类重名的问题。包对于类,就相当于文件夹对于文件的作用
包名:域名倒着写,再加上模块名
比如我的域名是www.yanshan.cn
那么包可以是cn.yanshan再加上模块名
注意事项
1、写项目时都要加包,不要使用默认包
2、com.zy和com.zy.car这两个包是没有包含关系的,是两个完全独立的包,只是逻辑上看起来后者是前者的一部分
常用的包
Scanner从键盘输入
import
java会默认导入java.lang包下所有的类
如果导入两个同名的类,只能用包名+类名来显示调用相关类
静态导入
导入Math类的所有静态属性
import static java.lang.Math.*;
导入Math类的PI属性
import static java.lang.Math.PI;
继承
1、父类也称作超类、基类、派生类等
2、Java中类只有单继承,没有多继承,接口有多继承
3、子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如父类私有属性和方法)
4、如果定义一个类的时候,没有调用extends,则他的父类是:java.lang.Object
Ctrl+T 查看继承结构
instanceof
instanceof是二元运算符,左边是对象,右边是类;当对象是右面类或子类 所创建对象时,返回ture;否则返回false
方法的重写
我们继承的父类里的方法不适用,那么我们就可以通过重写父类的方法,用自身的行为替换父类的行为
方法的重写需要符合以下要求:
1、方法名、形参列表相同
2、返回值类型和声明异常类型,子类小于等于父类
3、访问权限,子类大于等于父类
Object类
object类是所有Java类饿根基类,所有的Java对象都拥有object类的属性和方法
toString方法
object类中定义有public String toString(),方法,其返回值是String类型
“==”与equals方法
“==”代表比较双方是否相同,如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象
Object类中定义有:public boolean equals(Object obj)方法,提供定义“对象内容相等”的逻辑
super父类对象引用
super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
使用super调用普通方法,语句没有位置限制,可以在子类中随便调用
构造方法第一句总是:super(...)来调用父类对应的构造方法。所以,流程就是:先向上追溯到object,然后在依次向下执行类的初始化块和构造方法,直到当前子类为止
package ccn.zy.oo1;
public class TestSuper {
public static void main(String[] args) {
System.out.println("开始创建一个ChildClass对象");
new ChildClass();
}
}
class FatherClass{
public FatherClass() {
System.out.println("创建FatherClass");
}
}
class ChildClass extends FatherClass{
public ChildClass() {
super();
System.out.println("创建ChildClass");
}
封装
程序追求“高内聚,低耦合”
高内聚就是类的内部数据操作细节自己完成,不允许外部干涉
低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用
(default表示没有修饰符修饰)
类的属性的处理
1、属性一般使用private访问权限
2、提供相应的get/set方法来访问相关属性,这些方法通畅是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头的)
属性被隐藏起来了,通过一个方法实现对外的控制 set方法和get方法
set方法:
get方法:
自动生成set、get方法
多态
多态指的是同一个方法调用,由于对象不同可能会有不同的行为。
多态的要点
1、多态是方法的多态,不是属性的多态
2、多态的存在要有3个必要条件:继承、方法重写、父类引用指向子类对象
3、父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了
package ccn.zy.oo1;
public class TestPolym {
public static void main(String[] args) {
Animal a=new Animal();
animalCry(a);
Dog d=new Dog();
animalCry(d);
animalCry(new Cat());
}
static void animalCry(Animal a) {
a.shout();
}
}
class Animal{
public void shout() {
System.out.println("叫一声");
}
}
class Dog extends Animal{
public void shout () {
System.out.println("旺旺旺");
}
}
class Cat extends Animal{
public void shout () {
System.out.println("喵喵喵");
}
}
Final关键字
1、修饰变量:变成常量,不能被重新赋值
2、修饰方法:该方法不可以被子类重写,但是可以被重载
3、修饰类:被修饰的类不能被继承
比如:Math,String