一、类:对象的抽象; 有属性(有什么)和方法(能干什么)
1.属性(有什么)
1.1属性的分类(按照其访问权限)
分为:私有(private)、默认(default)、受保护(protected)和公共(public)
1.2 代码示例:
1.2.1 定义一个People的类(在同一个类中,都可以使用):
package Best3;
public class People {
//属性:
//身高
private double height;
//体重
public double weight;
String name;
//财产
protected String property;
//方法:
private void howHigh(double height){
this.height=height;
System.out.println("这是私有关键字中的身高:"+this.height+"m");
}
public void howeight(double weight){
this.weight=weight;
System.out.println("这是公共关键字中的体重:"+this.weight+"斤");
}
void name(String name){
this.name=name;
System.out.println("这是默认中的名字:"+this.name);
}
protected void howMoney(String property){
this.property=property;
System.out.println("这是受保护关键字中的钱:"+this.property);
}
//添加的get和set
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
//在同一个类中的调用
public static void main(String[] args) {
// TODO Auto-generated method stub
People people1=new People();
people1.name("死胖子");
people1.howHigh(1.74);
people1.howeight(150);
people1.howMoney("身无分文");
}
}
运行结果:
1.2.2 同包的类(在同一个包中定义一个ren的类):私有的不能用
代码:
package Best3;
public class Ren {
//在同一个包中的调用
public static void main(String[] args) {
// TODO Auto-generated method stub
People people1=new People();
people1.name("死胖子");
//people1.howHigh(1.74);
people1.howeight(150);
people1.howMoney("身无分文");
}
}
1.2.2.1 同包的父子关系及爷孙关系(在同一个包中定义一个SiPangZi的子类和XiaoPangZi的孙类):只有私有的不能用
子类代码:
package Best3;
public class SiPangZi extends People{
//派生类中调用
public static void main(String[] args) {
// TODO Auto-generated method stub
People people1=new People();
people1.name("死胖子");
//people1.howHigh(1.74); 私有的不可以被调用
people1.howeight(150);
people1.howMoney("身无分文");
}
}
运行结果:
孙类代码:
package Best3;
//孙子辈
public class XiaoPangZi extends SiPangZi{
public static void main(String[] args) {
// TODO Auto-generated method stub
People people1=new People();
people1.name("小胖子");
//people1.howHigh(1.81); 私有的不可以被调用
people1.howeight(150);
people1.howMoney("身无分文");
}
}
结果:
1.2.3 不同包的父子关系(在不同的包中定义一个SiShengZi的类):私有的和默认的不能用
代码:
package New;
import Best3.People;
public class SiShengZi extends People{
//不同包的父子关系
public static void main(String[] args) {
// TODO Auto-generated method stub
SiShengZi people2=new SiShengZi();
//people2.name("私生子"); 默认的不能用
//people1.howHigh(1.74); 私有的不能用
people2.howeight(150);
people2.howMoney("身无分文");
}
}
结果:
1.2.4 不同包的爷孙关系(在同一个包中定义一个SiShengSun的类): 只有公共的可以用
代码:
package New;
import Best3.SiPangZi;
public class SiShengSun extends SiPangZi{
//不同包中的爷孙关系
public static void main(String[] args) {
// TODO Auto-generated method stub
SiShengZi people2=new SiShengZi();
//people2.name("死胖子"); 默认的不能用
//people1.howHigh(1.74); 私有的不能用
people2.howeight(150);
//people2.howMoney("身无分文"); 被保护的不能用
}
}
结果:
1.2.5 不同包的非父子关系(在不同的包中定义一个Outdoor的类):只有公共的可以用
代码:
package New;
import Best3.People;
public class Outdoor {
public static void main(String[] args) {
// TODO Auto-generated method stub
SiShengZi people2=new SiShengZi();
//people2.name("死胖子"); 默认的不能用
//people1.howHigh(1.74); 私有的不能用
people2.howeight(150);
//people2.howMoney("身无分文"); 受保护的不能用
}
}
结果:
1.2 基本数据类型及String的默认值
代码:
package ChuShiHua;
public class Student {
//定义属性
public static String name;
public static int age;
public static double height;
public static float weight;
public static long money;
public static byte cry;
public static short hi;
public static boolean pd;
public static char dc;
public static void main(String[] args) {
System.out.println("这是字符串默认值:"+name);
System.out.println("这是int(整形)的默认值:"+age);
System.out.println("这是double(双精度浮点型)默认值:"+height);
System.out.println("这是float(浮点型)的默认值:"+weight);
System.out.println("这是long(长整型)的默认值:"+money);
System.out.println("这是byte(字节)的默认值:"+cry);
System.out.println("这是short(短整型)的默认值:"+hi);
System.out.println("这是boolean(布尔)的默认值:"+pd);
System.out.println("这是char(单字符)的默认值:"+dc);
}
}
结果:
1.3 一个类可以包含的三种变量
局部变量、成员变量、类变量
1.3.1 局部变量
在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
1.3.2 成员变量
成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
1.3.3 类变量
类变量也声明在类中,方法体之外,但必须声明为 static 类型。
2.方法(能干什么)
2.1 方法的分类
构造方法、静态方法、非静态方法
2.1.1 构造方法
构造方法的定义
构造方法的名称必须与它所在的类名完全相同。
构造方法没有返回类型,也不能写void,因为它的返回值类型是该类本身。
构造方法的主要作用是完成对类对象的初始化工作(刚出生的人,也可以称之为刚出生的对象,都会有名字,大名、小名、乳名。。。至少有一个名字),包括初始化对象的成员变量。
构造方法在创建对象时自动调用,不需要在程序中显式调用。
如果没有为类定义任何构造方法,系统会自动提供一个无参数的默认构造方法。
构造方法的分类
一、默认的构造方法
public Car(){
}
二、有参数的构造方法
public Car(String name){
this.name = name;
}
2.1. 2非静态方法(又叫实例方法):必须先进行实例化,使用实例化后的对象进行访问
//普通方法
public void method() {
System.out.println("普通的方法");
}
//普通属性
String a=“普通变量的值”
2.1.3 静态方法(又叫类方法):不需要实例化也可以使用
// 静态修饰的方法
public static void staticMethod() {
System.out.println("静态方法");
}
静态属性也和静态方法一样,不用实例化也可以使用(只要使用了static都可以不用实例化便可以使用)
//静态属性:
Static String a=”静态变量的值”;
2.2 方法的重载
2.2.1 定义
一个类中如果有多个同名的方法,但是参数个数或参数类型不同,被称为方法的重载
2.2.2 目的
功能类似的方法使用同一个名字,更容易记住,调用起来更简单
2.2.3 注意
方法的重载的返回值类型通常是相同的,也就是说返回值不作为重载的判断依据。
2.2.4 方法重载的判断依据
参数个数或参数类型不同
2.2.5 方法重载的例子
public static void testMethod() {
}
public static void testMethod(int a) {
}
public static void testMethod(double a) {
}
public static void testMethod(int a,double b) {
}
2.3 继承
2.3.1 定义
子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使子类具有父类相同的行为
2.3.2 Object类
Object类是Java中所有类的超类(父类)
所有类都默认继承Object类
2.3.3 Object类的常用方法
toString() 表示该对象的字符串表示,通常该方法会返回一个 “以文本方式表示”的字符串
hashCode()返回该对象的哈希码值
equals()指示某个其它对象是否与此对象相等(==、equals和 equalsIgnoreCase()请看 运算符篇 )
2.3.4 this关键字
含义:this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
用法分类:
1.普通的直接引用
this 相当于是指向当前对象本身
2.形参与成员名字重名,用this来区分
//成员变量
private String name;
//形参
public Car(String name){
this.name=name;
}
3.引用构造函数
与super相似
2.3.5 super关键字
含义:super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
用法分类:
1.普通的直接引用
与 this 类似,super 相当于是指向当前对象的父类,这样就可以用 super.xxx 来引用父类的成员。
name=super.getName();
2.子类中的成员变量或方法与父类的成员变量或方法同名
父类:
String name;
public void canRun(String name){
name="父类方法中的名字";
}
子类:
String name;
public void canRun(){
name="子类方法中的名字";
System.out.println(name);
System.out.println(super.name);
}
3.引用构造函数
super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。
this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)
2.3.4 继承示例:
1:写一个Vehicle的类
public class Vehicle {
//私有属性
//颜色的私有属性
private String color;
//价格的私有属性
private String price;
//名字的私有属性
private String name;
//品牌的私有属性
private String brand;
//车牌号的私有属性
private String vin;
//方便使用Vehicle的私有属性
//需右键,找到Source————Generate Getters and Setters...添加"get"(获得)和"set"(设置,给东西)》
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getVin() {
return vin;
}
public void setVin(String vin) {
this.vin = vin;
}
//公共的 没有返回值的 非静态方法
public void canRun(){
System.out.println("Best02can run~");
}
}
2:子类继承父类(用extends)
package Best02;
public class Car extends Vehicle {
public Car(){
//调用父类的构造方法
//super(name);
//调用父类的公共方法
//this.setName(name);
//this.name=name;
}
//可以载物
public void canLoad(){
System.out.println("能载物");
}
}
2.4 重写
2.4.1 定义
子类根据需要对从父类中继承的方法进行重写
2.4.2 要求
- 三同原则:同方法名、同返回值类型、同参数列表
- 子类中的覆盖方法不能使用比父类中被覆盖的方法更严格的访问权限
2.4.3 例子
父类中重写前
public void canRun(){
System.out.println("重写前");
}
子类中重写后
public void canRun(){
System.out.println("重写后~");
}
2.5 多态
2.5.1 定义
多态性指的是通过父类的引用变量来引用子类的对象,从而实现对不同对象的统一操作。允许不同类型的对象对同一方法进行不同的实现。
2.5.2 例子
Animal animal=new Cat();
animal.cry();
animal.test();
Animal animal1=new Dog();
animal1.cry();
animal.test();
2.6 final关键字
2.6.1 特点
final表示最终的、最后的、可以用来修饰类、方法、属性(变量)
final修饰的类不能被继承
final修饰的方法不能被重写
final修饰的属性(变量)不能被改变----》常量的定义方式
2.6.2 代码
Public static final double MAX_VALUE=34.5;