Java类与对象及类的继承

Java类与对象及类的继承

一.类与对象
1.对象:对象是指一个具体的事物。举个例子:一朵粉红玫瑰。那么这朵粉红玫瑰就可以是一个对象。
2.类:类是对对象的抽象,用来描述对象的总的属性。例如:花。花可以当作一个类,是用来描述一类事物的,比如粉红玫瑰,百合等都可以归为花这个类。
3.类的定义:
public class <类名>{
//定义属性
<修饰词> <类型> <属性名>;
……
//定义方法
<修饰词> <返回类型> <方法名>(参数……){}
……
}``
属性可以理解为我们为描述一个对象的特征而定义的一些变量。
方法则可以理解为对这个类的操作。

其中,Java修饰词有四个:
public:公有的,其他类可以直接访问。
protected:受保护的,同一包下的类或继承该类的子类可以访问。
default(即不写任何修饰符的时候):作用同protected。
private:私有的,其他类不能直接访问,要通过该类的成员方法进行操作。

举个具体例子:

//定义花这个类
public class Flower {
	//-----属性------
    public String name;//花的名称
    protected String color;//花的颜色
    private float price;//花的市场价格
    
    //-----方法-----
    //获取花价格
    public float getPrice() {
    	return price;
    }
    
    //设置花价格
    public void setPrice(float p) {
    	price = p;
    }
}

定义了一个简单的花类,name,color,price都是花这个类的属性,getPrice(),setPrice(float p)是这个类的方法(可以理解为C语言中的函数)。

public String name;//花的名称

public 即修饰词,表示这个是公有的,其他类可以直接访问,权限最大,String表示这个变量是字符串类型的,name则是变量名。

//获取花价格
    public float getPrice() {
    	return price;
    }
    
    //设置花价格
    public void setPrice(float p) {
    	price = p;
    }

定义price变量时我们用得时private修饰词,所以其他类不能直接访问,所以我们定义两个成员方法来对其进行操作。

//获取花价格
    public float getPrice() {
    	return price;
    }

float表示返回值类型,利用它我们可以获取该类的私有变量price。

 public void setPrice(float p) {
    	price = p;
    }

这串代码让我们可以设置私有变量price的值。

二.类的继承
1.类的继承的格式:
public class <类名>(即子类或派生类) extends <父类名>(即父类或基类){
……
}
Java规定,一个类只能继承一个父类(当然每个类被创建时都默认继承一个Object类,这个类除外)。
子类可以继承父类的所有属性和方法。子类可以重写父类已用的方法。

例:

public class Person {
    public String name;
    
    public void eating() {
    	System.out.println("吃东西中");
    }
    
    public void sleeping() {
    	System.out.println("睡觉中");
    }
}

Person父类,Student子类。

public class Student extends Person{
    public void eating() {
    	System.out.println("喝汤中");
    }
    
    public void study() {
    	System.out.println("学习中");
    }
}

Student 类重写了Person类的eating()方法。

public class Inter {
    public static void main(String[] args) {
		Student person = new Student();
		person.eating();
		person.sleeping();
		person.study();
	}
}

运行下列代码,输出

喝汤中
睡觉中
学习中

可知调用的eating()方法时Student类重写过的,而sleeping()方法是Student类从父类中继承过来的,Student本身没有,却能调用,这就是继承的好处,通过继承父类已有的东西,而不需要重新再写,可以提高效率,而当父类的一些东西不好用时,我们还可以重新定义,也可以覆盖父类的方法,来实现代码的灵活性。

2.关于向上转型(自动转型)

public class Inter {
    public static void main(String[] args) {
		Person person = new Student();
		person.eating();
		person.sleeping();
		//person.study();该行代码会报错
	}
}

我们可以用父类的类型去声明一个变量而用子类去创建它。

Person person = new Student();

而当我们调用方法时,会先去查找父类的方法,如果没有,则无法调用,上述代码中,Student中的study() 方法无法被调用,正因为父类中没有该方法,如果有,则看子类中是否有重新该方法,若有,则调用子类的方法,若没有,则调用的方法来自父类。

向上转型的应用:
当一个类方法的参数为类时,我们可以用继承了该类的派生类来充当该参数,避免了一个方法因为类的不同而针对其各子类都写一个一样的方法,这样提高了代码的灵活性和高效性。

举个例子:

    JLabel jl = new JLabel("你好");
	jf.add(jl);
	
	JButton jb = new JButton("确定");
	jf.add(jb);

图中JLabel类和JButton类均可以充当add()方法的参数,而该方法的原参数类型为:

 public Component add(Component comp) {
        addImpl(comp, null, -1);
        return comp;
    }

Component类,正因为JLabel类和JButton类都是Component类的子类,所以当作该参数来使用。

本人也是一个Java初学者,上述内容都是个人理解,可能包含很多错误和片面的想法,望网友们体谅,也欢迎各位大佬参与讨论和评论。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值