320 likes | 403 Views
Learn how to create custom types in Java, such as Bank Accounts and Circles, to model real-world concepts. Explore defining attributes, methods, and interactions for objects. Practice creating objects and accessing their properties.
E N D
Introduction to Objects A way to create our own types
Type and Variables • Until this point we were only able to create simple types, actually call “primitive” types • integer • double • float • char • String (actually not primitive)
We want to do better • Bank Account • Math Calculator • Stock • Car • Vending machine • Telephone • Model “whatever” as software • Make a computer act like one
Use type to create a variable intx; Use class to create an object Circlemycircle=newCircle();
Consider methods • Take a known process • Package it for reuse if ((a >= b) && (a>=c)) max = a else if ((b >= a) && (b>=c)) max = b else max = c; int maxof3(int a, int b, int c){ int max; if ((a >= b) && (a>=c)) max = a else if ((b >= a) && (b>=c)) max = b else max = c; return max; }
How are object like this? • Take a group of methods and data and package those for reuse. class Testclass int i int i int k a( ) int k a( ) b( ) b( ) c( ) c( )
int i; int j; class TestClass{ int i; int j; void a() {…} void b() {…} void c() {…} } void a() {…} void b() {…} void c() {…}
How do we decide what goes inside? • The problem will guide us. • The things we put inside will define • What the object will do • How we can interact with it • These things will be the “Bank Account”s, “Student”s, etc
Let’s start simple A circle
What are some of the attributes of a circle? • Radius (most obvious) • Color • Border • Position
How do we interact with a circle? • Change it’s size • Move it • Ask it for it’s area • … depending on the problem’s needs
Let’s start with a simple Circle class • Just a radius • No borders or colors • A means of asking it for it’s area. • This will serve as the basis (a type or class) for creating lots of circles
Circle() class Circle { double radius; Circle(double r) { radius = r; } double Area() { double thisarea = radius*radius*Math.PI; return thisarea; } }
Circle() Heading for the class class Circle { double radius; Circle(double r) { radius = r; } double Area() { double this area = radius*radius*Math.PI; } }
Circle() class Circle { double radius; Circle(double r) { radius = r; } double Area() { double thisarea = radius*radius*Math.PI; return thisarea; } } A property of each circle
Circle() class Circle { double radius; Circle(double r) { radius = r; } double Area() { double thisarea = radius*radius*Math.PI; return thisarea; } } A method named Area that will calculate the area of that specific circle
Circle() class Circle { double radius; Circle(double r) { radius = r; } double Area() { double thisarea = radius*radius*Math.PI; return thisarea; } } A constructor Used to initialize the circle Let’s see how in the next slide
Creating circles Circle circle1 = new Circle(10); circle1 Radius:10
Creating circles Circle circle1 = new Circle(10); circle1 radius:10 Circle circle2 = new Circle(15); circle2 radius:15
Asking about area Circle circle1 = new Circle(10); System.out.println(circle1.Area()); circle1 radius:10 Each circle will return it’s own area Circle circle2 = new Circle(15); System.out.println(circle2.Area()); circle2 radius:15
What’s the difference? • Circle circle1 = new Circle(10); • Circle circle1; Creates a REFERENCE Like having a telephone number for a friend.. a means to find them. But this one is a contact without a number.
What’s the difference? • Circle circle1 = new Circle(10); • Circle circle1; Creates the object and defines the reference to the object In this case, circle1 actually refers to a real Circle.
Only a reference.. No circle Circle circle1; circle1
A reference with a circle Circle circle1 = new Circle(10); circle1 Radius:10
public class Circle { double radius; Circle(double r) { radius = r; } double Area() { double thisarea = radius*radius*Math.PI; return thisarea; } public static void main(String args[]) { Circle circle1 = new Circle(10); System.out.println(circle1.Area()); Circle circle2 = new Circle(15); System.out.println(circle2.Area()); } } Put it Together! 314.1562.. 706.8583..
Do I need new()?Can I define a variable and just reference from the main?How about this?… TRY IT… public class Circle() { double radius=5; public static void main(String args[]) { System.out.println(radius); } } Error: non-static variable radius cannot be referenced from a static context You never “new()”ed one. No radius exists.
Only a reference.. No circle Circle circle1; circle1
public class Circle() { double radius=5; double Area() { double this area = radius*radius*Math.PI; } public static void main(String args[]) { System.out.println(Area()); } } Do I need new()?Here there is no Area() or radius defined.Because NO new() has occurred! Error : nonstatic method can not be referenced from static method
public class Circle { double radius; Circle(double r) { radius = r; } double Area() { double thisarea = radius*radius*Math.PI; return thisarea; } public static void main(String args[]) { Circle circle1 = new Circle(10); System.out.println(circle1.Area()); Circle circle2 = new Circle(15); System.out.println(circle2.Area()); } } This one creates the object.Then a radius and Area() exists to use… no errors. These are created when you new()
public class Circle { double radius; Circle(double r) { radius = r; } double Area() { double thisarea = radius*radius*Math.PI; return thisarea; } public static void main(String args[]) { int i = 5; System.out.println(i); Circle circle1 = new Circle(10); System.out.println(circle1.Area()); } } Why can I declare “i” like this in the main, but not radius in the previous example? This is legal!
public class Circle { double radius; Circle(double r) { radius = r; } double Area() { double thisarea = radius*radius*Math.PI; return thisarea; } public static void main(String args[]) { int i = 5; System.out.println(i); Circle circle1 = new Circle(10); System.out.println(circle1.Area()); } } Because main is static. Static needs more explanation.