1.面向对象思想的编程方式
[1]创建类。属性,行为。
[2]创建对象。分配内存空间,初始化属性。
[3]调用对象中的行为。
2.继承
概念:子类扩展父类的功能。
子类扩展父类,可以得到父类的属性和方法,避免代码的重复冗余。
子类可以添加自己的属性和方法
子类可以重写父类的方法
java中使用extends关键字来完成继承
格式:public subclass extends superclass {}
注意:1.在java中只允许单继承(一个子类只能有一个父类,一个父类可以多个子类)
2.子类不能访问父类的私有成员
public 公共的 可以被所有类访问
private 私有的 只能被自己访问
缺省 只能被同包访问
protected 受保护的 可以被子类访问,也可以被同包访问
访问控制修饰符可以修饰类,属性,方法
类只能被public,缺省来修饰
4.关于父类和子类的构造方法
[1]如果父类只定义了带参的构造方法,那么子类必须在构造的第一行调用父类的构造方法。
例如super关键字
[2]如果父类没有定义构造方法或者父类定义的是不带参的构造方法,
那么子类不需要显示调用父类的构造
5.方法的重写(覆盖)override
概念:发生在父类和子类之间。
特点:1.方法名一样,返回值一样,参数列表一样。
2.覆盖的方法不能比父类中被覆盖的方法更严格的访问权限。
3.覆盖的方法不能比被覆盖的方法抛出更多的异常。
6.this和super
this表示当前对象
[1]this.属性
[2]this.方法
[1]创建类。属性,行为。
[2]创建对象。分配内存空间,初始化属性。
[3]调用对象中的行为。
2.继承
概念:子类扩展父类的功能。
子类扩展父类,可以得到父类的属性和方法,避免代码的重复冗余。
子类可以添加自己的属性和方法
子类可以重写父类的方法
java中使用extends关键字来完成继承
格式:public subclass extends superclass {}
注意:1.在java中只允许单继承(一个子类只能有一个父类,一个父类可以多个子类)
2.子类不能访问父类的私有成员
package com03;
public class Shape {
protected int a;
protected int b;
public Shape(int _a, int _b) {
// TODO Auto-generated constructor stub
a = _a;
b = _b;
}
int getArea()
{
return 0;
}
}
package com03;
public class Circle extends Shape{
public Circle(int _a) {
super(_a, _a);
// TODO Auto-generated constructor stub
}
int getArea()
{
return (int)(Math.PI * a * a);
}
}
package com03;
public class Rect extends Shape{
public Rect(int _a, int _b) {
super(_a, _b);
// TODO Auto-generated constructor stub
}
//子类覆盖了父类的方法
//方法的重写
//1.方法名一样,返回值一样,参数列表一样,子类的方法不能比父类方法拥有更低的权限。
public int getArea()
{
return a*b;
}
}
package com03;
public class Thriangle extends Shape {
public Thriangle(int _a) {
super(_a, _a);
// TODO Auto-generated constructor stub
}
int getArea() {
return (int) (Math.sin(Math.PI / 3) * a * a / 2);
}
}
package com03;
public class Trapezoid extends Shape {
public int c;
public Trapezoid(int _a,int _b,int _c) {
super(_a,_b,_c);
// TODO Auto-generated constructor stub
}
int getArea() {
return (int) (0.5 * ((a + b) * c));
}
}
package com03;
public class TRect extends Shape {
int h;
public TRect(int _a, int _b, int _h) {
super(_a, _b); //调用父类构造
// TODO Auto-generated constructor stub
h = _h;
}
}
package com03;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Circle c = new Circle(2);
System.out.println(c.getArea());
Rect r = new Rect(2, 2);
System.out.println(r.getArea());
Thriangle t = new Thriangle(10);
System.out.println(t.getArea());
}
}
3.访问控制修饰符
public 公共的 可以被所有类访问
private 私有的 只能被自己访问
缺省 只能被同包访问
protected 受保护的 可以被子类访问,也可以被同包访问
访问控制修饰符可以修饰类,属性,方法
类只能被public,缺省来修饰
4.关于父类和子类的构造方法
[1]如果父类只定义了带参的构造方法,那么子类必须在构造的第一行调用父类的构造方法。
例如super关键字
[2]如果父类没有定义构造方法或者父类定义的是不带参的构造方法,
那么子类不需要显示调用父类的构造
5.方法的重写(覆盖)override
概念:发生在父类和子类之间。
特点:1.方法名一样,返回值一样,参数列表一样。
2.覆盖的方法不能比父类中被覆盖的方法更严格的访问权限。
3.覆盖的方法不能比被覆盖的方法抛出更多的异常。
6.this和super
this表示当前对象
[1]this.属性
[2]this.方法
[3]this(..) 调用当前构造
package com;
//一类事物
//静态的属性和动态行为
public class Book {
String name;
int price;
String authors[];
//构造方法作用:初始化属性
public Book(String name, int price)
{
this.name = name;
this.price = price;
System.out.println(this);
}
public Book(String name, int price, String authors[]) {
// TODO Auto-generated constructor stub
this(name, price); //调用当前构造
this.authors = authors;
}
public void printBookInfo()
{
//当前对象
setPrice(0.8f);
System.out.println(name + " " + price);
System.out.println(this);
}
private void setPrice(float sub)
{
price = (int)(price*sub);
}
}
package com;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Book book = new Book("think in java", 100);
book.printBookInfo();
System.out.println(book);
Book book_02 = new Book("head first in java", 99);
book_02.printBookInfo();
}
}