学习心得一
类与对象
类:大多数面向对象的程序设计语言中用class来表示“我准备告诉你一种新类型的对象是什么”:
`class AtypeName{/*
属性();
方法();*/}`
如
果要使用类,需要用new来创建这种类型的对象:
ATypeName a= new ATypeName();
那么,什么是对象?
对象:在java中,所有的事物几乎都可以看为是对象,它是一个独立的个体,每个对象有自己独立的属性,依靠不同的属性来区分不同的对象。
存储到什么位置:
栈存储java的对象的属性,即对象引用,对象并不存放其中。
所有的java对象存储在堆中。
常量值通常存放在代码的内部,这样做是安全的,因为这样永远不会被改变。有时在嵌入系统中,常量本身会和其他部分隔开,所以在这种情况下,可以选择存放在ROM中。
如果数据完全存活于程序之外,可以采用非RAM存储方式,这种存储方式的技巧在于:把对象转化成可以存放在其他媒介上的事物,在需要时,可以恢复成常规的、基于RAM 的对象。
类是抽象的,更类似于一个模板。
对象是类的实例,类只有通过对象才可以使用。
封装、继承与多态
封装、继承、多态是面向对象的三大基本特性。
封装:
就是把抽象的数据和对数据的操作封装在一起,数据被保存在内部,一些对数据的操作和数据是私有的,不能被外界访问,只有通过授权的部分才能进行操作。
封装保护内部操作不被破坏。
继承:
继承可以解决代码复用问题,在我的理解里是为了让代码更加简洁。子类继承父类里的方法和属性,不需要重新定义属性和方法,直接用extends继承父类即可。
子类最多可继承一个父类。
此处的Circle Square Triangle继承了Shape当中的五个方法。
Triangle中添加了Delete方法,其他子类中没有。
方法覆盖:
子类重写父类的中的方法
要求子类的方法的返回类型,参数,方法名称,要和父类方法的返回类型,参数,方法名称完全一样,否则编译出错。
子类方法不能缩小父类方法的访问权限。
使导出类和基类之间产生差异的方法是改变现有基类的方法的行为,这被称之为覆盖。
多态:
多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态使不同结构对象共享相同的接口。
public class A extends JFrame{
public static void main(String[] args) {
// grap g1 = new grap();
Animal animal = new Cat();
animal.voice();
animal = new Dog();
animal.voice();
}
}
public class Animal {
int age;
String nameString;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNameString() {
return nameString;
}
public void setNameString(String nameString) {
this.nameString = nameString;
}
public void voice() {
System.out.println("不知道怎么叫····");
}
}
//体现了方法的覆盖
class Cat extends Animal
{
public void voice() {
System.out.println("喵喵");
}
}
class Dog extends Animal
{
public void voice() {
System.out.println("汪汪");
}
}
public class Animal {
int age;
String nameString;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getNameString() {
return nameString;
}
public void setNameString(String nameString) {
this.nameString = nameString;
}
public void voice() {
System.out.println("不知道怎么叫····");
}
public void eat() {
System.out.println("小虾小鱼");
}
}
//体现了方法的覆盖
class Cat extends Animal
{
public void voice() {
System.out.println("喵喵");
}
}
class Dog extends Animal
{
public void voice() {
System.out.println("汪汪");
}
}
class Food
{
public String name;
public void showName() {
}
}
class Fish extends Food
{
public void showName()
{
System.out.println("鱼···");
}
}
class Bone extends Food
{
public void showName()
{
System.out.println("骨头···");
}
}
class Master
{
//给动物喂食物,使用多态,方法就可以用一个
public void feed(Animal an,Food food) {
an.eat();
food.showName();
}
}
package com.swing;
import javax.swing.*;
public class A extends JFrame{
public static void main(String[] args) {
Master master = new Master();
master.feed(new Dog(),new Bone());
}
}
上一篇: HTML5特效~3D立方体旋转
下一篇: java的序列化