在java中“//”表示注释,注释内容便于理解代码,且注释内容不参与运行代码;
以下内容“//”后面所跟内容为具体例子。
一.类与对象
1.数据类型
在认识类与对象前,我们先要了解java中的数据类型:
java中的数据类型分为基本类型和引用类型;
(1)基本类型(8个):a.整形:byte、short、int、long;
b.字符型:char;
c.浮点型:float、double;
d.布尔型:boolean;
(2)引用类型(5个):类(class)、接口(interface)、数组、枚举、注解。
2.类与对象的认识及关系
我们在生活中遇见的任何事物都可以被称之为对象,比如你可以称电脑是一个对象,键盘是一个对象。但在java中对于对象的概念需要更具体一点:比如电脑,要具体到谁的电脑、什么颜色的电脑、多大的电脑,一个黄色的电脑是一个对象,一个蓝色的电脑又是另一个对象。但是,他们又都是一台电脑,此时我们就可以称电脑是一个类,电脑这个类里面包含很多个具有不同特征的电脑作为一个个对象。由此可以看出类与对象是所属关系,一个个同类但特征不同的对象构成一个类。
3.类的组成
类的组成分为属性和方法(也可以理解成特征和行为),比如电脑,它的属性有颜色、名字、大小等,它的方法有开机、关机、运行程序等。但是又如上文所言,此处电脑作为一个类,是不会有具体特征的,那又怎么会有具体的属性和方法呢?此时对象就派上用场了:对象使得类中抽象的属性和方法具体化,也就是说类中的属性和方法要通过对象调用。而使用对象的格式为:
对象名.属性 = ;
对象名.方法();
public class Student{
public String name;
public void study(Student name){
System.out.println(“学习”);
}
public static void main(String[]args) {
Student student1 = new Student();
student1.name = "张三";
student1.study();
}
}
4.类和对象的创建
java中创建一个class文件,这个文件就是一个类,你输入的文件名即为类名。而对象需要在类中创建,格式为: 类名 对象名 = new 类名();//Student student1 = new Student();
需要注意的是:类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。
此外,java中的命名遵循如下规则:(1)名称只能由字母、数字、下划线、$符号组成;
(2)不能以数字开头;
(3)名称不能使用JAVA中的关键字;
(4)坚决不允许出现中文及拼音命名。
二.构造方法
1.构造方法的作用:当对象中有多个属性需要被赋值时,使用构造方法能使代码更简洁,因此构造方法的作用为:(1)创建对象;
(2)同时给多个属性初始化(赋值)。
2.构造方法的使用:
(1) 使用普通方法的格式为:public + 返回值 + 方法名(参数类型 参数名){方法体};
public class Student{
public void Study(Student name){
System.out.println(“学习”);
}
}
(2)使用构造方法格式为:public + 方法名(此时的方法名只能为当前类的类名)(参数类型 参数名){方法体};
public class Student{
public Student(Student name){
System.out.println(“学习”);
}
}
(3)每一个类都有一个默认的无参构造方法,当自己定义构造方法后,默认的无参构造方法 就会被替代 ;
(4)构造方法不需要手动去调用,当我们创建一个对象时就已经自动调用,如:
类名 对象名 = new 类名();此时new 类名()就是在调用当前类的无参构造方法。
三.类的继承
1.认识类的继承
java中多种类型间存在继承关系,子类(又叫派生类)继承父类(又叫超类、基类),父类与子类间是包含关系,比如:人类——男性类——男青年类——男学生类,如上述关系,我们在定义子类与父类时也必须要有实际含义,人类与青蛙类间固然可以通过语句实现继承关系,但不具有实际含义,实际上人类和青蛙类并不存在继承关系。
2.类的继承的作用
子类在继承父类后可以使用父类的一切属性和方法(父类中的私有属性,子类必须通过set和get方法调用),这样可以使代码更加简洁;而通过在子类中重写父类中的方法,使得父类中的不同对象具有不同的行为,这样可以使程序更加灵活。
3.方法重写
(1)上文提到方法重写,那么何为方法重写呢?即继承父类方法后的子类,通过更改方法体进而实现子类对象在执行同名方法时表现出与父类对象不同的行为。
(2)方法重写条件:a.有继承关系的两个类;
b.子类中要重写的方法的访问修饰符、返回值、方法名、参数类型、个数、 顺序需要与父类中的原方法完全一样,仅更改方法体。
4.使用类的继承
(1) 类的继承格式:public class 子类名 extends 父类名{};
public class Son extends Father{
}
(2)java中的类只能单继承,extends后只能跟一个父类,一个子类只能有一个父类,一个父类 可以有多个子类;
(3)父类中的构造方法无法被继承;
5.转型
(1)自动转型(向上转型):
a.子类的对象可以转化为父类的对象;
b.自动转型后该对象优先执行子类重写的方法
c.自动转型后子类特有的方法不能调用;
public class Father{
public void eat(String name){
System.out.println("父亲正在吃" + name);
}
public static void main(String[]args){
Father fa = new Son()
//自动转型的格式为:父类 对象名 = new 子类();
fa.eat("萝卜");
//此时输出语句为"儿子正在吃萝卜",即执行子类重写后的方法。
}
public class Son extends Father{
public void eat(String name){
System.out.println("儿子正在吃" + name);
}
}
(2)强制转型(向下转型):
a.父类的对象可以转化为子类的对象;
b.只有当这个父类对象是先由子类通过向上转型得到的时候才能够成功向下转型;
Father fa = new Son();
Son so = (Son)fa;
//此时父类中的fa对象强制转型为子类中的so对象
//java.lang.ClassCastException表示强制类型转换异常
6.补充
需注意的是,若一个方法定义时要求填入A类的参数,而A类extendsB类,则该方法也可以填入B类的参数。
public class UNStudent extends Student{
public void study(UNStudent a){
System.out.print(a+"正在学习。")
}
}
public static void main(Strings[]args){
Student student = new Student();
UNStudent unstudent = new UNStudent();
unstudent.study(student);//要求填入子类参数类型时可以填入父类参数类型
}
且Object类是所有参数类型的父类。
四.接口的继承
1.认识常量和抽象方法
设置属性为常量的格式为:public static final 参数类型 常量名 = ;
其中static为静态关键字,若设置属性前加了static,则表示该变量为类变量,即所有对象共享该变量,该变量值可以修改,修改后不同对象调用该变量获得的值都相同,因为通过不同对象调用类变量获得的值都相同,所以调用类变量可以直接通过类名调用,原先是:对象名.属性 = ;可以改为:类名.属性 = ;
final表示不可变,即该属性无法改变初始值,因此若设置属性前加了final,那该属性一定要被赋予初始值;
static和final是常量的两大特征,因为在接口中的属性都默认为常量,所以在接口中设置属性也可以省略static final,直接public 参数类型 常量名 = ;
接口中的方法都为抽象方法,即没有方法体的方法;
创建接口的格式为:public interface 接口名{};
public interface Student{
public static final String NAME = "张三";
//常量名全用大写表示,区别于一般属性
public void study(Student NAME){};
}
2.接口的特征
(1)接口中定义的属性都为常量;
(2)接口中所有的方法都是抽象方法(即没有方法体);
(3)接口不能直接创建对象。
3.认识接口的继承
上文我们提到java中的类只能单继承,一个子类只能继承一个父类中的方法,而接口的继承就是为了解决该问题。接口是一系列方法的声明,是一些方法特征的集合,通过添加监听器,可以在不同的类中使用接口中的方法,使代码更加简洁。
4.继承接口
接口的继承分为两个步骤:(1)重新定义继承类口; (格式为:public class 子类 implements 接口,接口,接口{};)
public class Mouse implements ActionListener,MouseListener{
//该Mouse类同时继承了ActionListener、MouseListener这两个接口。
}
(2)重写接口中的抽象方法。