1、创建类的格式
public class 类名 {
//可编写0至n个属性
数据类型 变量名1;
数据类型 变量名2;
//可编写0至n个方法
修饰符 返回值类型 方法名(参数){
执行语句;
}
}
例:创建一个汽车类
public class Car{
//成员变量
String color;
i nt gulu;
//成员方法
public void run(){
System.out.println("颜色为"+color+",轱辘个数为:"+gulu+"个的小汽车在跑");
}
}
在创建一个测试类
public class Demo01 {
public static void main(String[] args) {
//创建汽车对象
Car car=new Car();
//赋值
car.color="红色";
car.gulu=4;
//调用方法
car.run();
}
}
运行结果:
颜色为红色,轱辘个数为:4个的小汽车在跑
图解:
2、局部变量与成员变量的区别
(1)定义位置不同,成员变量在类中,局部变量是定义在方法中
(2)在内存中的位置不不同,成员变量随对象进堆,局部变量随方法进栈
(3)生命周期不同,成员变量随对象进堆,随着对象的消失而从堆中进jc垃圾回收机制,局部变量随方法进栈执行,执行完毕弹栈消失
(4)初始化不同,成员变量随对象进堆附默认值,局部变量没有默认初始化值
面向对象的特点:封装,继承,多态
3、封装
概念:隐藏了实现细节,并对外提供公共的访问方式
例:创建一个Person类
public class Person {
private String name;
private int age;
//存值的方法
public void setName(String n){
name=n;
}
//取值
public String getName(){
return name;
}
//存值
public void setAge(int n){
if(n<0){
System.out.println("年龄错误");
}else{
age=n;
}
}
//取值
public int getAge(){
return age;
}
public void speak(){
System.out.println("我叫"+name+"今年"+age+"岁。");
}
}
创建一个测试类
public class Demo01 {
public static void main(String[] args) {
Person person=new Person();
//调用赋值方法
person.setName("小红帽");
//调用取值方法
System.out.println(person.getName());
//调用赋值方法
person.setAge(21);
//调用取值方法
System.out.println(person.getAge());
person.speak();
}
}
注:在该例子中,在Person类中对名字和年龄进行了封装,加了private关键字,加了之后,该属性只能在类中进行访问,在其他类中不可访问,
所以将这两个属性封装在了方法中,在其他类中调用该方法就能使用
封装this关键字
this关键字一般用来区分成员变量和局部变量重名的问题
this代表类对象本身,简单来讲就是哪个对象调用this,这个this就代表哪个对象
例:创建一个Person类
public class Person {
private String name;
private int age;
//存值的方法
public void setName(String name){
this.name=name;
}
注:该方法中的形式参数与Person类中的属性name 重名,则this.name就代表这个Person类对象的name,则等号右边的name代表该方法传入的参数
//取值
public String getName(){
return name;
}
//存值
public void setAge(int age){
this.age=age;
}
//取值
public int getAge(){
return age;
}
public void speak(){
System.out.println("我叫"+name+"今年"+age+"岁。");
}
}
图解:
例:写一个方法用来比较两个人是否是同龄人
首先创建一个Person类
public class Person{
int age;
//判断两个人是否是同龄人
public boolean compare(Person p){
return this.age==p.age;
}
}
注:这个判断两个人是否是同龄的方法,前提是两个人类对象的年龄值是否相等,返回值是布尔类型
创建一个测试类
public class Demo02 {
public static void main(String[] args) {
//创建两个人对象
Person p1=new Person();
p1.setName("公雪");
p1.setAge(21);
Person p2=new Person();
p2.setName("海绵宝宝");
p2.setAge(21);
System.out.println(p1.compare(p2));
}
}
4、继承
子类可以自动继承父类所有可继承的属性和方法
格式:
class 子类 extends 父类 {}
例:创建一个Emp类
public class Emp {
String name;
public void work(){
System.out.println("我叫"+name);
}
}
创建一个子类开发部门类
public class KaiFa extends Emp {
}
创建一个测试类,在测试类内创建一个开发部门对象
public class Demo01 {
public static void main(String[] args) {
KaiFa kf=new KaiFa();
kf.name="张三";
kf.work();
}
}
运行结果:我叫张三;
继承注意事项:
java中类继承稚嫩和单继承,多个类可以继承一个父类,但一个类只能继承一个父类,可以多层继承,比如c继承b,b继承a
如果父类和子类拥有同样的方法名还有同样的属性,但属性值不同,则java采用就近原则,子类对象就会采用子类中的方法名和属性
例:
创建一个父类
public class Fu {
int a=1;
public void sleep(){
System.out.println("父类睡觉");
}
}
创建一个子类
public class Zi extends Fu{
int a=2;
public void sleep(){
System.out.println("子类睡觉");
}
}
创建一个测试类
public class Demo01 {
public static void main(String[] args) {
Zi z=new Zi();
System.out.println(z.a);
z.sleep();
}
}
此时运行结果为;
2
子类睡觉
继承 方法重写
关键字super,代表父类,例:super.show() 代表父类的show方法
方法重写举例:
创建一个父类:老年机类
public class OldPhone {
public void sendMassage(){
System.out.println("发短信");
}
public void call(){
System.out.println("打电话");
}
public void show(){
System.out.println("显示来电号码");
}
}
创建一个子类:新手机类
public class NewPhone extends OldPhone {
public void show() {
//super父类对象
super.show();
System.out.println("显示头像");
System.out.println("显示姓名");
}
}
注:子类中对父类的show方法进行了重写,在原本父类show方法的功能基础上添加了新的功能
创建一个测试类
public class Demo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
NewPhone p=new NewPhone();
p.call();
p.sendMassage();
p.show();
}
}
运行结果为:
打电话
发短信
显示来电号码
显示头像
显示姓名
方法重写注意事项:
子类方法覆盖父类方法,必须要保证权限大于等于父类权限
必须一模一样:方法的返回值类型 方法名 参数列表都要一样
方法重载:在同一个类中,方法名相同,参数列表,数量,类型,个数,只要有一个不同,这就叫方法的重载
方法重写:在子类中出现与父类,修饰符,返回值,方法名,参数列表一模一样的方法叫方法重写