Re: class up

Java少不了类,很多个类有着若即若离的关系,当然也可能是被测面的真实写照,不过研究的不深又怎么会继续发现下去,拿来用就行的拿来主义也不错啊。

  • A:修饰符:
    • 权限修饰符:private,默认的,protected,public
    • 状态修饰符:static,final
    • 抽象修饰符:abstract
  • B:类:
    • 权限修饰符:默认修饰符,public,外部类不能用私有的
    • 状态修饰符:final
    • 抽象修饰符:abstract
    • 用的最多的就是:public
  • C:成员变量:
    • 权限修饰符:private,默认的,protected,public
    • 状态修饰符:static,final
    • 用的最多的就是:private
  • D:构造方法:
    • 权限修饰符:private,默认的,protected,public
    • 用的最多的就是:public
  • E:成员方法:
    • 权限修饰符:private,默认的,protected,public
    • 状态修饰符:static,final
    • 抽象修饰符:abstract
    • 用的最多的就是:public
  • F:除此以外的组合规则:
    • 成员变量:public static final
    • 成员方法:
      • public static
      • public abstract
      • public final

修饰符应该是写的最多的用例了吧,你又不会敲100个输出语句来打印100个HelloWorld吧。
内部类?愿他长寿!

  • 内部类访问特点

    • a:内部类可以直接访问外部类的成员,包括私有。
    • b:外部类要访问内部类的成员,必须创建对象。
    • 外部类名.内部类名 对象名 = 外部类对象.内部类对象。
  • 局部内部类访问局部变量必须用final修饰

  • 局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
    因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用。1.8版本的就不多说了。

来个例子:

class Demo1_NoNameInnerClass {
public static void main(String[] args) {
	Outer o = new Outer();
	o.method();
	}
}
interface Inter {
public void print();
}

class Outer {
class Inner implements Inter {
	public void print() {
		System.out.println("print");
	}
}

public void method(){
	//Inner i = new Inner();
	//i.print();
	//new Inner().print();
	//Inter i = new Inner();			//父类引用指向子类对象
	
	new Inter() {						//实现Inter接口
		public void print() {			//重写抽象方法
			System.out.println("print");
		}
	}.print();
	}
}

Object类的toString()方法真的很好用

apackage com.itboya.object;
import com.itboya.bean.Student;
public class Demo2_ToString {
/**
 * 运行结果:com.itboya.bean.Student@40671416 
 * 通过查看源码(ctrl+单击"toString方法")返现,上述结果中@符号前是给对象所属类的全名称,
 * .@符号后面是该对象hashCode值的十六进制的字符串表现形式,toString()源码如下:
 * public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
 *问题:在实际使用时直接打印出类全名称@hashCode值的十六进制的字符串表现形式,是没有意义的
 *而实际上我们是想看到对象的具体的详细信息,这样就需要子类重写父类的toString方法
 *重写toString方法的意义用用:可以更方便显示属性值,而getXxx()方法获取值可以进行其它运算,可以显示或做其它操作
 * @param args
 */
public static void main(String[] args) {
	//在重写toString方法前后分别运行改程序,看结果
	Student student = new Student("张三",23);
	//String str = student.toString();
	//System.out.println(str);
	//上面的两句话,可以写成下面的一句
	System.out.println(student.toString());
	System.out.println(student);	//直接打印对象的引用,默认调用toString方法
	
	System.out.println("我的姓名是:"+student.getName()+",我的年龄是:"+student.getAge());
	
	}
}

==号和equals方法的区别

  • ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值

  • equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性

其它就没啥了,了解的多了自然就多了。
ps:每日一词
蝶恋花(正韵)

夜尽寒吹无久雨,惜柳迎风,叶落斜飞去。湘里东君怀念处。蓬莱仙岛楼无数。

阁主扶门移玉柱,魂点思空,下坠人间树。春夏秋冬青杏煮,香残云梦留千古。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include <iostream> using namespace std; #include<string> #include"time.h" #include"math.h" #define PI 3.1415926 //请在begin和end之间填入代码 /**************begin*****************/ class Shape { public: virtual double area() = 0; }; class Circle : public Shape { public: Circle(double r) : radius(r) {} virtual double area() { return PI * radius * radius; } private: double radius; }; class Square : public Shape { public: Square(double w) : width(w) {} virtual double area() { return width * width; } private: double width; }; class Rectangle : public Shape { public: Rectangle(double w, double h) : width(w), height(h) {} virtual double area() { return width * height; } private: double width, height; }; class Trapezoid : public Shape { public: Trapezoid(double eu, double eb, double h) : up(eu), bottom(eb), height(h) {} virtual double area() { return (up + bottom) * height / 2; } private: double up, bottom, height; }; class Triangle : public Shape { public: Triangle(double e1, double e2, double e3) : edge1(e1), edge2(e2), edge3(e3) {} virtual double area() { double p = (edge1 + edge2 + edge3) / 2; return sqrt(p * (p - edge1) * (p - edge2) * (p - edge3)); } private: double edge1, edge2, edge3; }; /****************end**************/ int main() { double r,h,e1,e2,e3,eup,ebo,w; cin>>r; Circle c(r); cin>>w; Square sq(w); cin>>e1>>e2>>e3; Triangle tr(e1,e2,e3); cin>>w>>h; Rectangle re(w,h); cin>>eup>>ebo>>h; Trapezoid trap(eup,ebo,h); double sum=0; /*****************begin*******************/ Shape *shape[5]; for (int i = 0; i < 5; i++) { sum += shape[i]->area(); } cout << "area sum=" << sum << endl; /******************end*****************/ cout<<"area sum="<<sum; }以上代码有什么错
06-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值